From 61d26f9ca11d35ef67bc1eab793159e7e8bfd331 Mon Sep 17 00:00:00 2001 From: H.G.Muller Date: Fri, 1 Apr 2016 22:01:40 +0200 Subject: [PATCH] Use GTK color picker instead of R, G, B and D buttons By an awful hack in the generic dialog constructor ever Button Option with the name R, G or B is now completely ignored, while Buttons with name D will be replaced by GtkColorButtons. Instead of catching the "clicked" signal these will respond to the "color-set" signal, invoking a handler private to the GTK front end, which will set the color text and colorof the reset button as the platform-independent handler of the RGBD buttons would normally have done. Unfortunately this had to use deprecated GTK2 stuff, as the recommended GTK3 equivalents are not understood on Ubuntu 10.04. --- gtk/xoptions.c | 21 +++++++++++++++++++++ 1 files changed, 21 insertions(+), 0 deletions(-) diff --git a/gtk/xoptions.c b/gtk/xoptions.c index c643d64..8df9c44 100644 --- a/gtk/xoptions.c +++ b/gtk/xoptions.c @@ -297,6 +297,18 @@ FontCallback (GtkWidget *widget, gpointer gdata) } void +ColorCallback (GtkWidget *widget, gpointer gdata) +{ + Option *opt = (Option *) gdata; + GdkColor rgba; + char buf[MSG_SIZ]; + gtk_color_button_get_color(GTK_COLOR_BUTTON(widget), &rgba); + snprintf(buf, MSG_SIZ, "#%02x%02x%02x", rgba.red>>8, rgba.green>>8, rgba.blue>>8); + gtk_widget_modify_bg ( GTK_WIDGET(opt[1].handle), GTK_STATE_NORMAL, &rgba ); + SetWidgetText(opt, buf, TransientDlg); +} + +void SetListBoxItem (GtkListStore *store, int n, char *msg) { GtkTreeIter iter; @@ -1536,6 +1548,12 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); Pack(hbox, table, fbutton, left, left+r, top, 0); break; } + if(!strcmp(option[i].name, "R") || !strcmp(option[i].name, "G") || !strcmp(option[i].name, "B")) { + break; + } else + if(!strcmp(option[i].name, "D")) { + option[i].handle = (void *) (button = gtk_color_button_new()); + } else button = gtk_button_new_with_label (_(option[i].name)); SetWidgetFont(gtk_bin_get_child(GTK_BIN(button)), option[i].font); @@ -1560,6 +1578,9 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width); } Pack(hbox, table, button, left, left+1, top, 0); + if(!strcmp(option[i].name, "D")) // color button + g_signal_connect (button, "color-set", G_CALLBACK (ColorCallback), (gpointer) &option[i-5]); + else if(option[i].value == 666 && !strcmp(option[i].name, "*")) // font-assignment buttons g_signal_connect (button, "clicked", G_CALLBACK (FontCallback), (gpointer) &option[i-5]); else -- 1.7.0.4