all repos — tint2 @ a73c6928c39a0b8d741bc17f543d1819a638d681

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

tint2conf: Buttons
o9000 mrovi9000@gmail.com
commit

a73c6928c39a0b8d741bc17f543d1819a638d681

parent

d5dfda296f66e41b18e92f005709050bfa31f036

3 files changed, 497 insertions(+), 0 deletions(-)

jump to
M src/tint2conf/properties.csrc/tint2conf/properties.c

@@ -115,6 +115,9 @@

// Executors GArray *executors; +// Buttons +GArray *buttons; + // launcher GtkListStore *launcher_apps, *all_apps;

@@ -155,6 +158,7 @@ GtkWidget **task_status_background,

GtkWidget **task_status_background_set); void create_separator(GtkWidget *parent, int i); void create_execp(GtkWidget *parent, int i); +void create_button(GtkWidget *parent, int i); void create_clock(GtkWidget *parent); void create_systemtray(GtkWidget *parent); void create_battery(GtkWidget *parent);

@@ -227,6 +231,7 @@ (void) tooltips;

separators = g_array_new(FALSE, TRUE, sizeof(Separator)); executors = g_array_new(FALSE, TRUE, sizeof(Executor)); + buttons = g_array_new(FALSE, TRUE, sizeof(Button)); // global layer view = gtk_dialog_new();

@@ -1208,6 +1213,7 @@ gtk_list_store_clear(panel_items);

int separator_index = -1; int execp_index = -1; + int button_index = -1; for (; items && *items; items++) { const char *value = NULL;

@@ -1245,6 +1251,12 @@ buffer[0] = 0;

sprintf(buffer, "%s %d", _("Executor"), execp_index + 1); name = buffer; value = "E"; + } else if (v == 'P') { + button_index++; + buffer[0] = 0; + sprintf(buffer, "%s %d", _("Button"), button_index + 1); + name = buffer; + value = "P"; } else { continue; }

@@ -1283,11 +1295,14 @@ if (g_str_equal(value, ":")) {

separator_create_new(); } else if (g_str_equal(value, "E")) { execp_create_new(); + } else if (g_str_equal(value, "P")) { + button_create_new(); } } } separator_update_indices(); execp_update_indices(); + button_update_indices(); } void panel_remove_item(GtkWidget *widget, gpointer data)

@@ -1320,6 +1335,14 @@ execp_remove(i);

break; } } + } else if (g_str_equal(value, "P")) { + for (int i = 0; i < buttons->len; i++) { + Button *button = &g_array_index(buttons, Button, i); + if (g_str_equal(name, button->name)) { + button_remove(i); + break; + } + } } gtk_list_store_remove(panel_items, &iter);

@@ -1327,6 +1350,7 @@ }

separator_update_indices(); execp_update_indices(); + button_update_indices(); } void panel_move_item_down(GtkWidget *widget, gpointer data)

@@ -1380,6 +1404,21 @@ }

Executor tmp = *executor1; *executor1 = *executor2; *executor2 = tmp; + } else if (g_str_equal(value1, "P") && g_str_equal(value2, "P")) { + Button *button1 = NULL; + Button *button2 = NULL; + for (int i = 0; i < buttons->len; i++) { + Button *button = &g_array_index(buttons, Button, i); + if (g_str_equal(name1, button->name)) { + button1 = button; + } + if (g_str_equal(name2, button->name)) { + button2 = button; + } + } + Button tmp = *button1; + *button1 = *button2; + *button2 = tmp; } gtk_list_store_swap(panel_items, &iter, &next);

@@ -1387,6 +1426,7 @@ }

} separator_update_indices(); execp_update_indices(); + button_update_indices(); } void panel_move_item_up(GtkWidget *widget, gpointer data)

@@ -1441,6 +1481,21 @@ }

Executor tmp = *executor1; *executor1 = *executor2; *executor2 = tmp; + } else if (g_str_equal(value1, "P") && g_str_equal(value2, "P")) { + Button *button1 = NULL; + Button *button2 = NULL; + for (int i = 0; i < buttons->len; i++) { + Button *button = &g_array_index(buttons, Button, i); + if (g_str_equal(name1, button->name)) { + button1 = button; + } + if (g_str_equal(name2, button->name)) { + button2 = button; + } + } + Button tmp = *button1; + *button1 = *button2; + *button2 = tmp; } gtk_list_store_swap(panel_items, &iter, &prev);

@@ -1449,6 +1504,7 @@ }

} separator_update_indices(); execp_update_indices(); + button_update_indices(); } enum {

@@ -4160,6 +4216,278 @@

change_paragraph(parent); } +void create_button(GtkWidget *notebook, int i) +{ + GtkWidget *label; + GtkWidget *table; + int row, col; + GtkTooltips *tooltips = gtk_tooltips_new(); + + Button *button = &g_array_index(buttons, Button, i); + + button->name[0] = 0; + sprintf(button->name, "%s %d", _("Button"), i + 1); + button->page_label = gtk_label_new(button->name); + gtk_widget_show(button->page_label); + button->page_button = gtk_vbox_new(FALSE, DEFAULT_HOR_SPACING); + button->container = addScrollBarToWidget(button->page_button); + gtk_container_set_border_width(GTK_CONTAINER(button->page_button), 10); + gtk_widget_show(button->page_button); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), button->container, button->page_label); + + GtkWidget *parent = button->page_button; + + table = gtk_table_new(1, 2, FALSE); + gtk_widget_show(table); + gtk_box_pack_start(GTK_BOX(parent), table, FALSE, FALSE, 0); + gtk_table_set_row_spacings(GTK_TABLE(table), ROW_SPACING); + gtk_table_set_col_spacings(GTK_TABLE(table), COL_SPACING); + row = 0, col = 2; + + label = gtk_label_new(_("<b>Format</b>")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_label_set_use_markup(GTK_LABEL(label), TRUE); gtk_widget_show(label); + gtk_box_pack_start(GTK_BOX(parent), label, FALSE, FALSE, 0); + + table = gtk_table_new(3, 10, FALSE); + gtk_widget_show(table); + gtk_box_pack_start(GTK_BOX(parent), table, FALSE, FALSE, 0); + gtk_table_set_row_spacings(GTK_TABLE(table), ROW_SPACING); + gtk_table_set_col_spacings(GTK_TABLE(table), COL_SPACING); + row = 0, col = 2; + + label = gtk_label_new(_("Icon")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_icon = gtk_entry_new(); + gtk_widget_show(button->button_icon); + gtk_entry_set_width_chars(GTK_ENTRY(button->button_icon), 50); + gtk_table_attach(GTK_TABLE(table), button->button_icon, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + row++, col = 2; + label = gtk_label_new(_("Text")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_text = gtk_entry_new(); + gtk_widget_show(button->button_text); + gtk_entry_set_width_chars(GTK_ENTRY(button->button_text), 50); + gtk_table_attach(GTK_TABLE(table), button->button_text, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + row++, col = 2; + label = gtk_label_new(_("Tooltip")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_tooltip = gtk_entry_new(); + gtk_widget_show(button->button_tooltip); + gtk_entry_set_width_chars(GTK_ENTRY(button->button_tooltip), 50); + gtk_table_attach(GTK_TABLE(table), button->button_tooltip, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + change_paragraph(parent); + + label = gtk_label_new(_("<b>Mouse events</b>")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_label_set_use_markup(GTK_LABEL(label), TRUE); + gtk_widget_show(label); + gtk_box_pack_start(GTK_BOX(parent), label, FALSE, FALSE, 0); + + table = gtk_table_new(5, 10, FALSE); + gtk_widget_show(table); + gtk_box_pack_start(GTK_BOX(parent), table, FALSE, FALSE, 0); + gtk_table_set_row_spacings(GTK_TABLE(table), ROW_SPACING); + gtk_table_set_col_spacings(GTK_TABLE(table), COL_SPACING); + row = 0, col = 2; + + label = gtk_label_new(_("Left click command")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_left_command = gtk_entry_new(); + gtk_widget_show(button->button_left_command); + gtk_entry_set_width_chars(GTK_ENTRY(button->button_left_command), 50); + gtk_table_attach(GTK_TABLE(table), button->button_left_command, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + gtk_tooltips_set_tip(tooltips, button->button_left_command, + _("Specifies a command that will be executed when the button receives a left click."), NULL); + + row++, col = 2; + label = gtk_label_new(_("Right click command")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_right_command = gtk_entry_new(); + gtk_widget_show(button->button_right_command); + gtk_entry_set_width_chars(GTK_ENTRY(button->button_right_command), 50); + gtk_table_attach(GTK_TABLE(table), button->button_right_command, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + gtk_tooltips_set_tip(tooltips, button->button_right_command, + _("Specifies a command that will be executed when the button receives a right click."), NULL); + + row++, col = 2; + label = gtk_label_new(_("Middle click command")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_mclick_command = gtk_entry_new(); + gtk_widget_show(button->button_mclick_command); + gtk_entry_set_width_chars(GTK_ENTRY(button->button_mclick_command), 50); + gtk_table_attach(GTK_TABLE(table), button->button_mclick_command, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + gtk_tooltips_set_tip(tooltips, button->button_mclick_command, + _("Specifies a command that will be executed when the button receives a middle click."), NULL); + + row++, col = 2; + label = gtk_label_new(_("Wheel scroll up command")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_uwheel_command = gtk_entry_new(); + gtk_widget_show(button->button_uwheel_command); + gtk_entry_set_width_chars(GTK_ENTRY(button->button_uwheel_command), 50); + gtk_table_attach(GTK_TABLE(table), button->button_uwheel_command, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + gtk_tooltips_set_tip(tooltips, button->button_uwheel_command, + _("Specifies a command that will be executed when the button receives a mouse scroll up."), NULL); + + row++, col = 2; + label = gtk_label_new(_("Wheel scroll down command")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_dwheel_command = gtk_entry_new(); + gtk_widget_show(button->button_dwheel_command); + gtk_entry_set_width_chars(GTK_ENTRY(button->button_dwheel_command), 50); + gtk_table_attach(GTK_TABLE(table), button->button_dwheel_command, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + gtk_tooltips_set_tip(tooltips, button->button_dwheel_command, + _("Specifies a command that will be executed when the button receives a mouse scroll down."), NULL); + + change_paragraph(parent); + + label = gtk_label_new(_("<b>Appearance</b>")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_label_set_use_markup(GTK_LABEL(label), TRUE); + gtk_widget_show(label); + gtk_box_pack_start(GTK_BOX(parent), label, FALSE, FALSE, 0); + + table = gtk_table_new(3, 22, FALSE); + gtk_widget_show(table); + gtk_box_pack_start(GTK_BOX(parent), table, FALSE, FALSE, 0); + gtk_table_set_row_spacings(GTK_TABLE(table), ROW_SPACING); + gtk_table_set_col_spacings(GTK_TABLE(table), COL_SPACING); + row = 0, col = 2; + + label = gtk_label_new(_("Background")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_background = create_background_combo(_("Button")); + gtk_widget_show(button->button_background); + gtk_table_attach(GTK_TABLE(table), button->button_background, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + gtk_tooltips_set_tip(tooltips, button->button_background, _("Selects the background used to display the button. " + "Backgrounds can be edited in the Backgrounds tab."), NULL); + + row++, col = 2; + label = gtk_label_new(_("Horizontal padding")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_padding_x = gtk_spin_button_new_with_range(0, 500, 1); + gtk_widget_show(button->button_padding_x); + gtk_table_attach(GTK_TABLE(table), button->button_padding_x, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + gtk_tooltips_set_tip(tooltips, button->button_padding_x, _("Specifies the horizontal padding of the button. " + "This is the space between the border and the content inside."), NULL); + + row++, col = 2; + label = gtk_label_new(_("Vertical padding")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_padding_y = gtk_spin_button_new_with_range(0, 500, 1); + gtk_widget_show(button->button_padding_y); + gtk_table_attach(GTK_TABLE(table), button->button_padding_y, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + gtk_tooltips_set_tip(tooltips, button->button_padding_y, _("Specifies the vertical padding of the button. " + "This is the space between the border and the content inside."), NULL); + + row++, col = 1; + button->button_font_set = gtk_check_button_new(); + gtk_widget_show(button->button_font_set); + gtk_table_attach(GTK_TABLE(table), button->button_font_set, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + gtk_tooltips_set_tip(tooltips, button->button_font_set, _("If not checked, the desktop theme font is used. If checked, the custom font specified here is used."), NULL); + col++; + + label = gtk_label_new(_("Font")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_font = gtk_font_button_new_with_font(get_default_font()); + gtk_widget_show(button->button_font); + gtk_table_attach(GTK_TABLE(table), button->button_font, col, col+3, row, row+1, GTK_FILL, 0, 0, 0); + col++; + gtk_font_button_set_show_style(GTK_FONT_BUTTON(button->button_font), TRUE); + gtk_signal_connect(GTK_OBJECT(button->button_font_set), "toggled", GTK_SIGNAL_FUNC(font_set_callback), button->button_font); + font_set_callback(button->button_font_set, button->button_font); + + row++, col = 2; + label = gtk_label_new(_("Font color")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_font_color = gtk_color_button_new(); + gtk_color_button_set_use_alpha(GTK_COLOR_BUTTON(button->button_font_color), TRUE); + gtk_widget_show(button->button_font_color); + gtk_table_attach(GTK_TABLE(table), button->button_font_color, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + row++, col = 2; + label = gtk_label_new(_("Centered")); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + gtk_widget_show(label); + gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + button->button_centered = gtk_check_button_new(); + gtk_widget_show(button->button_centered); + gtk_table_attach(GTK_TABLE(table), button->button_centered, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); + col++; + + change_paragraph(parent); +} + void separator_create_new() { g_array_set_size(separators, separators->len + 1);

@@ -4172,6 +4500,12 @@ g_array_set_size(executors, executors->len + 1);

create_execp(notebook, executors->len - 1); } +void button_create_new() +{ + g_array_set_size(buttons, buttons->len + 1); + create_button(notebook, buttons->len - 1); +} + Separator *separator_get_last() { if (separators->len <= 0)

@@ -4184,6 +4518,13 @@ {

if (executors->len <= 0) execp_create_new(); return &g_array_index(executors, Executor, executors->len - 1); +} + +Button *button_get_last() +{ + if (buttons->len <= 0) + button_create_new(); + return &g_array_index(buttons, Button, buttons->len - 1); } void separator_remove(int i)

@@ -4216,6 +4557,21 @@

executors = g_array_remove_index(executors, i); } +void button_remove(int i) +{ + Button *button = &g_array_index(buttons, Button, i); + + for (int i_page = 0; i_page < gtk_notebook_get_n_pages(GTK_NOTEBOOK(notebook)); i_page++) { + GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), i_page); + if (page == button->container) { + gtk_widget_hide(page); + gtk_notebook_remove_page(GTK_NOTEBOOK(notebook), i_page); + } + } + + buttons = g_array_remove_index(buttons, i); +} + void separator_update_indices() { for (int i = 0; i < separators->len; i++) {

@@ -4279,6 +4635,43 @@ execp_index++;

char buffer[256]; buffer[0] = 0; sprintf(buffer, "%s %d", _("Executor"), execp_index + 1); + + gtk_list_store_set(panel_items, &iter, + itemsColName, buffer, + -1); + } + + if (!gtk_tree_model_iter_next(model, &iter)) + break; + } +} + +void button_update_indices() +{ + for (int i = 0; i < executors->len; i++) { + Button *executor = &g_array_index(executors, Button, i); + sprintf(executor->name, "%s %d", _("Button"), i + 1); + gtk_label_set_text(GTK_LABEL(executor->page_label), executor->name); + } + + GtkTreeModel *model = GTK_TREE_MODEL(panel_items); + GtkTreeIter iter; + if (!gtk_tree_model_get_iter_first(model, &iter)) + return; + int button_index = -1; + while (1) { + gchar *name; + gchar *value; + gtk_tree_model_get(model, &iter, + itemsColName, &name, + itemsColValue, &value, + -1); + + if (g_str_equal(value, "E")) { + button_index++; + char buffer[256]; + buffer[0] = 0; + sprintf(buffer, "%s %d", _("Button"), button_index + 1); gtk_list_store_set(panel_items, &iter, itemsColName, buffer,
M src/tint2conf/properties.hsrc/tint2conf/properties.h

@@ -151,6 +151,21 @@ } Executor;

extern GArray *executors; +// Button +typedef struct Button { + char name[256]; + GtkWidget *container; + GtkWidget *page_button; + GtkWidget *page_label; + GtkWidget *button_icon, *button_text, *button_tooltip; + GtkWidget *button_left_command, *button_right_command; + GtkWidget *button_mclick_command, *button_rclick_command, *button_uwheel_command, *button_dwheel_command; + GtkWidget *button_font, *button_font_set, *button_font_color, *button_padding_x, *button_padding_y, *button_centered; + GtkWidget *button_background; +} Button; + +extern GArray *buttons; + // launcher enum {

@@ -263,6 +278,11 @@ void execp_create_new();

Executor *execp_get_last(); void execp_remove(int i); void execp_update_indices(); + +void button_create_new(); +Button *button_get_last(); +void button_remove(int i); +void button_update_indices(); void create_please_wait(GtkWindow *parent); void process_events();
M src/tint2conf/properties_rw.csrc/tint2conf/properties_rw.c

@@ -866,6 +866,46 @@ fprintf(fp, "\n");

} } +void config_write_button(FILE *fp) +{ + for (int i = 0; i < buttons->len; i++) { + fprintf(fp, "#-------------------------------------\n"); + fprintf(fp, "# Button %d\n", i + 1); + + Button *button = &g_array_index(buttons, Button, i); + + fprintf(fp, "button = new\n"); + fprintf(fp, "button_icon = %s\n", gtk_entry_get_text(GTK_ENTRY(button->button_icon))); + fprintf(fp, "button_text = %s\n", gtk_entry_get_text(GTK_ENTRY(button->button_text))); + fprintf(fp, "button_tooltip = %s\n", gtk_entry_get_text(GTK_ENTRY(button->button_tooltip))); + + fprintf(fp, "button_lclick_command = %s\n", gtk_entry_get_text(GTK_ENTRY(button->button_left_command))); + fprintf(fp, "button_rclick_command = %s\n", gtk_entry_get_text(GTK_ENTRY(button->button_right_command))); + fprintf(fp, "button_mclick_command = %s\n", gtk_entry_get_text(GTK_ENTRY(button->button_mclick_command))); + fprintf(fp, "button_uwheel_command = %s\n", gtk_entry_get_text(GTK_ENTRY(button->button_uwheel_command))); + fprintf(fp, "button_dwheel_command = %s\n", gtk_entry_get_text(GTK_ENTRY(button->button_dwheel_command))); + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button->button_font_set))) + fprintf(fp, "button_font = %s\n", gtk_font_button_get_font_name(GTK_FONT_BUTTON(button->button_font))); + GdkColor color; + gtk_color_button_get_color(GTK_COLOR_BUTTON(button->button_font_color), &color); + config_write_color(fp, + "button_font_color", + color, + gtk_color_button_get_alpha(GTK_COLOR_BUTTON(button->button_font_color)) * 100 / 0xffff); + fprintf(fp, + "button_padding = %d %d\n", + (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(button->button_padding_x)), + (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(button->button_padding_y))); + fprintf(fp, "button_background_id = %d\n", gtk_combo_box_get_active(GTK_COMBO_BOX(button->button_background))); + fprintf(fp, + "button_centered = %d\n", + gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button->button_centered)) ? 1 : 0); + + fprintf(fp, "\n"); + } +} + void config_write_tooltip(FILE *fp) { fprintf(fp, "#-------------------------------------\n");

@@ -939,6 +979,7 @@ config_write_clock(fp);

config_write_battery(fp); config_write_separator(fp); config_write_execp(fp); + config_write_button(fp); config_write_tooltip(fp); checksum = checksum_txt(fp);

@@ -1886,6 +1927,49 @@ } else if (strcmp(key, "execp_icon_h") == 0) {

gtk_spin_button_set_value(GTK_SPIN_BUTTON(execp_get_last()->execp_icon_h), atoi(value)); } else if (strcmp(key, "execp_centered") == 0) { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(execp_get_last()->execp_centered), atoi(value)); + } + + /* Button */ + else if (strcmp(key, "button") == 0) { + button_create_new(); + } else if (strcmp(key, "button_icon") == 0) { + gtk_entry_set_text(GTK_ENTRY(button_get_last()->button_icon), value); + } else if (strcmp(key, "button_text") == 0) { + gtk_entry_set_text(GTK_ENTRY(button_get_last()->button_text), value); + } else if (strcmp(key, "button_tooltip") == 0) { + gtk_entry_set_text(GTK_ENTRY(button_get_last()->button_tooltip), value); + } else if (strcmp(key, "button_lclick_command") == 0) { + gtk_entry_set_text(GTK_ENTRY(button_get_last()->button_left_command), value); + } else if (strcmp(key, "button_rclick_command") == 0) { + gtk_entry_set_text(GTK_ENTRY(button_get_last()->button_right_command), value); + } else if (strcmp(key, "button_mclick_command") == 0) { + gtk_entry_set_text(GTK_ENTRY(button_get_last()->button_mclick_command), value); + } else if (strcmp(key, "button_uwheel_command") == 0) { + gtk_entry_set_text(GTK_ENTRY(button_get_last()->button_uwheel_command), value); + } else if (strcmp(key, "button_dwheel_command") == 0) { + gtk_entry_set_text(GTK_ENTRY(button_get_last()->button_dwheel_command), value); + } else if (strcmp(key, "button_font") == 0) { + gtk_font_button_set_font_name(GTK_FONT_BUTTON(button_get_last()->button_font), value); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button_get_last()->button_font_set), TRUE); + } else if (strcmp(key, "button_font_color") == 0) { + extract_values(value, &value1, &value2, &value3); + GdkColor col; + hex2gdk(value1, &col); + gtk_color_button_set_color(GTK_COLOR_BUTTON(button_get_last()->button_font_color), &col); + if (value2) { + int alpha = atoi(value2); + gtk_color_button_set_alpha(GTK_COLOR_BUTTON(button_get_last()->button_font_color), (alpha * 65535) / 100); + } + } else if (strcmp(key, "button_padding") == 0) { + extract_values(value, &value1, &value2, &value3); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(button_get_last()->button_padding_x), atoi(value1)); + if (value2) + gtk_spin_button_set_value(GTK_SPIN_BUTTON(button_get_last()->button_padding_y), atoi(value2)); + } else if (strcmp(key, "button_background_id") == 0) { + int id = background_index_safe(atoi(value)); + gtk_combo_box_set_active(GTK_COMBO_BOX(button_get_last()->button_background), id); + } else if (strcmp(key, "button_centered") == 0) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button_get_last()->button_centered), atoi(value)); } if (value1)