}
void
+WidgetEcho (Option *opt, int n)
+{
+ gtk_entry_set_visibility(opt->handle, n);
+}
+
+void
SetWidgetFont (GtkWidget *w, char **s)
{
PangoFontDescription *pfd;
#endif
}
+int menuBlock = FALSE;
+
+static gboolean
+HelpEvent(GtkWidget *widget, GdkEventButton *event, gpointer gdata)
+{ // intercept button3 clicks to pop up help
+// Option *opt = (Option *) gdata;
+ char *msg = (char *) gdata;
+ int menu = (event->type == GDK_BUTTON_RELEASE); // only menu items trigger help on release
+ if(event->button != 3) return FALSE;
+ DisplayHelp(msg);
+ menuBlock = menu; // flag menu execution should be suppressed
+ return !menu;
+}
+
void ComboSelect(GtkWidget *widget, gpointer addr)
{
Option *opt = dialogOptions[((intptr_t)addr)>>8]; // applicable option list
int i = ((intptr_t)addr)>>16 & 255; // option number
int j = 0xFFFF & (intptr_t) addr;
+ if(menuBlock) { menuBlock = FALSE; return; } // was help click only
values[i] = j; // store selected value in Option struct, for retrieval at OK
((ButtonCallback*) opt[i].target)(i);
}
} else
entry = gtk_menu_item_new_with_label(msg);
gtk_signal_connect_object (GTK_OBJECT (entry), "activate", GTK_SIGNAL_FUNC(MenuSelect), (gpointer) (intptr_t) ((n<<16)+i));
+ g_signal_connect(entry, "button-release-event", G_CALLBACK (HelpEvent), (gpointer) mb[i].string );
if(mb[i].accel) {
guint accelerator_key;
GdkModifierType accelerator_mods;
}
if(memo->value == 250 // kludge to recognize ICS Console and Chat panes
&& gtk_text_buffer_get_selection_bounds(memo->handle, NULL, NULL) ) {
-printf("*** selected\n");
gtk_text_buffer_get_selection_bounds(memo->handle, &start, &end); // only return selected text
- index = -1; // kludge to indicate omething was selected
+ index = -1; // kludge to indicate something was selected
} else {
+ if(abs(button) == 3 && gtk_text_buffer_get_selection_bounds(memo->handle, NULL, NULL)) return FALSE; // normal context menu
// GTK_TODO: is this really the most efficient way to get the character at the mouse cursor???
gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(widget), GTK_TEXT_WINDOW_WIDGET, w, h, &x, &y);
gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(widget), &start, x, y);
}
/* get text from textbuffer */
val = gtk_text_buffer_get_text (memo->handle, &start, &end, FALSE);
- break;
+ if(strlen(val) != index) break; // if we clicked behind all text, fall through to do default action
default:
return FALSE; // should not happen
}
gtk_entry_set_max_length (GTK_ENTRY (entry), w);
// left, right, top, bottom
- if (strcmp(option[i].name, "") != 0)
+ if (strcmp(option[i].name, "") != 0) {
+ button = gtk_event_box_new();
+ gtk_container_add(GTK_CONTAINER(button), label);
+ label = button;
+ gtk_widget_add_events(GTK_WIDGET(label), GDK_BUTTON_PRESS_MASK);
+ g_signal_connect(label, "button-press-event", G_CALLBACK(HelpEvent), (gpointer) option[i].name);
+ gtk_widget_set_sensitive(label, TRUE);
gtk_table_attach(GTK_TABLE(table), label, left, left+1, top, top+1, GTK_FILL, GTK_FILL, 2, 1); // leading names do not expand
+ }
if (option[i].type == Spin) {
spinner_adj = (GtkAdjustment *) gtk_adjustment_new (option[i].value, option[i].min, option[i].max, 1.0, 0.0, 0.0);
break;
case CheckBox:
checkbutton = gtk_check_button_new_with_label(option[i].name);
+ g_signal_connect(checkbutton, "button-press-event", G_CALLBACK (HelpEvent), (gpointer) option[i].name );
if(!currentCps) option[i].value = *(Boolean*)option[i].target;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbutton), option[i].value);
gtk_table_attach(GTK_TABLE(table), checkbutton, left, left+r, top, top+1, GTK_FILL | GTK_EXPAND, GTK_FILL, 2, 0);
Pack(hbox, table, button, left, left+1, top, 0);
g_signal_connect (button, "clicked", G_CALLBACK (GenericCallback), (gpointer)(intptr_t) i + (dlgNr<<16));
+ g_signal_connect(button, "button-press-event", G_CALLBACK (HelpEvent), (gpointer) option[i].name );
option[i].handle = (void*)button;
break;
case ComboBox: