void
SetWidgetLabel (Option *opt, char *buf)
{
- gtk_label_set_text(opt->handle, buf);
+ if(opt->type == Button) // Chat window uses this routine for changing button labels
+ gtk_button_set_label(opt->handle, buf);
+ else
+ gtk_label_set_text(opt->handle, buf);
}
void
return menu;
}
-Option *typeIn; // kludge to distinguish type-in callback from input-box callback
+Option *icsBox; // kludge to distinguish type-in callback from input-box callback
void
CursorAtEnd (Option *opt)
}
static gboolean
-ICSKeyEvent(GtkWidget *widget, GdkEventKey *event, gpointer g)
-{
- Option *opt = (Option *) g;
- if(opt == typeIn) {
- if(event->keyval == GDK_Return) {
- char *val;
- GetWidgetText(opt, &val);
- TypeInDoneEvent(val);
- PopDown(TransientDlg);
- return TRUE;
- }
- return FALSE;
- }
-
- switch(event->keyval) {
+ICSKeyEvent (int keyval)
+{ // TODO_GTK: arrow-handling should really be integrated in type-in proc, and this should be a backe-end OK handler
+ switch(keyval) {
case GDK_Return: IcsKey(0); return TRUE;
case GDK_Up: IcsKey(1); return TRUE;
case GDK_Down: IcsKey(-1); return TRUE;
gboolean res;
gint index, x, y;
- if(memo->type == Label) { ((ButtonCallback*) memo->target)(memo->value); return TRUE; } // only clock widgets use this
-
switch(event->type) { // figure out what's up
case GDK_MOTION_NOTIFY:
f = 0;
button = bevent->button;
shiftState = bevent->state & GDK_SHIFT_MASK;
controlState = bevent->state & GDK_CONTROL_MASK;
+ if(memo->type == Label) { // only clock widgets use this
+ ((ButtonCallback*) memo->target)(button == 1 ? memo->value : -memo->value);
+ return TRUE;
+ }
// 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);
case 0: // history (now uses generic textview callback)
case 1: // comment (likewise)
break;
- case 2: // move type-in
- typeIn = opt;
case 3: // input box
- g_signal_connect(opt->handle, "key-press-event", G_CALLBACK (ICSKeyEvent), (gpointer) opt);
+ icsBox = opt;
+ case 2: // move type-in
+ g_signal_connect(opt->handle, "key-press-event", G_CALLBACK (TypeInProc), (gpointer) (dlg<<16 | (opt - dialogOptions[dlg])));
break;
case 5: // game list
g_signal_connect(opt->handle, "button-press-event", G_CALLBACK (GameListEvent), (gpointer) 0 );
w = option[i].type == Spin || option[i].type == Fractional ? 70 : option[i].max ? option[i].max : 205;
if(option[i].type == FileName || option[i].type == PathName) w -= 55;
- if (option[i].type==TextBox && option[i].value > 80){
+ if (option[i].type==TextBox && option[i].value > 80){
textview = gtk_text_view_new();
gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textview), option[i].min & T_WRAP ? GTK_WRAP_WORD : GTK_WRAP_NONE);
#ifdef TODO_GTK
option[i].min & T_VSCRL ? GTK_POLICY_ALWAYS : GTK_POLICY_NEVER);
gtk_container_add(GTK_CONTAINER(sw), textview);
gtk_widget_set_size_request(GTK_WIDGET(sw), w, -1);
+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_OUT);
textbuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
/* check if label is empty */
label = frame;
}
gtk_widget_set_size_request(label, option[i].max ? option[i].max : -1, -1);
- Pack(hbox, table, label, left, left+2, top, 0);
if(option[i].target) { // allow user to specify event handler for button presses
+ 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(MemoEvent), (gpointer) &option[i]);
+ gtk_widget_set_sensitive(label, TRUE);
}
+ Pack(hbox, table, label, left, left+2, top, 0);
break;
case SaveButton:
case Button:
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_container_add(GTK_CONTAINER(sw), list);
gtk_widget_set_size_request(GTK_WIDGET(sw), option[i].max ? option[i].max : -1, option[i].value ? option[i].value : -1);
+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_OUT);
if(option[i].textValue) // generic callback for double-clicking listbox item
g_signal_connect(list, "button-press-event", G_CALLBACK(ListCallback), (gpointer) (dlgNr<<16 | i) );
gtk_widget_show_all( dialog );
/* hide OK/cancel buttons */
- if((option[i].min & 2)) {
+ if((option[i].min & NO_OK)) {
actionarea = gtk_dialog_get_action_area(GTK_DIALOG(dialog));
gtk_widget_hide(actionarea);
+ } else if((option[i].min & NO_CANCEL)) {
+ button = gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog), GTK_RESPONSE_REJECT);
+ gtk_widget_hide(button);
}
g_signal_connect (dialog, "response",
void
HardSetFocus (Option *opt)
{
-#ifdef TODO_GTK
- XSetInputFocus(xDisplay, XtWindow(opt->handle), RevertToPointerRoot, CurrentTime);
-#endif
+ FocusOnWidget(opt, 0); // second arg not used in GDK
}