<URL: http://bugs.freeciv.org/Ticket/Display.html?id=39984 >

William Allen Simpson wrote:
> So, here's a different idea: in addition to the Cancel and OK buttons on
> the various options/settings dialogs, add a Save button.  I'm not good at
> GTK2 programming, but it looks relatively easy.
> 
The server "settable" options and local options dialogs used standard
GTK2 functions.  Here's the code.

The message options dialog is done as one of those switchable tab panes;
not easy to quickly figure that out.  It wasn't raised as the issue here,
anyway, so perhaps in the future....

Index: client/gui-gtk-2.0/repodlgs.c
===================================================================
--- client/gui-gtk-2.0/repodlgs.c       (revision 14221)
+++ client/gui-gtk-2.0/repodlgs.c       (working copy)
@@ -1449,9 +1449,17 @@
 *****************************************************************/
 static void settable_options_callback(GtkWidget *win, gint rid, GtkWidget *w)
 {
-  if (rid == GTK_RESPONSE_OK) {
+  switch (rid) {
+  case GTK_RESPONSE_ACCEPT:
     settable_options_processing(w);
-  }
+    save_options();
+    break;
+  case GTK_RESPONSE_APPLY:
+    settable_options_processing(w);
+    break;
+  default:
+    break;
+  };
   gtk_widget_destroy(win);
 }
 
@@ -1470,7 +1478,8 @@
     gtk_dialog_new_with_buttons(_("Game Settings"),
       NULL, 0,
       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-      GTK_STOCK_OK, GTK_RESPONSE_OK,
+      GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
+      GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
       NULL);
   win = settable_options_dialog_shell;
 
Index: client/gui-gtk-2.0/gamedlgs.c
===================================================================
--- client/gui-gtk-2.0/gamedlgs.c       (revision 14221)
+++ client/gui-gtk-2.0/gamedlgs.c       (working copy)
@@ -368,12 +368,11 @@
 /**************************************************************************
 ...
 **************************************************************************/
-static void option_command_callback(GtkWidget *w, gint response_id)
+static void option_command_processing(void)
 {
-  if (response_id == GTK_RESPONSE_OK) {
-    const char *dp;
-    bool b;
-    int val;
+  const char *dp;
+  bool b;
+  int val;
 
     client_options_iterate(o) {
       switch (o->type) {
@@ -423,10 +422,27 @@
     } else {
       gtk_window_unfullscreen(GTK_WINDOW(toplevel));
     }
-  }
-  gtk_widget_destroy(option_dialog_shell);
 }
 
+/**************************************************************************
+...
+**************************************************************************/
+static void option_command_callback(GtkWidget *win, gint rid)
+{
+  switch (rid) {
+  case GTK_RESPONSE_ACCEPT:
+    option_command_processing();
+    save_options();
+    break;
+  case GTK_RESPONSE_APPLY:
+    option_command_processing();
+    break;
+  default:
+    break;
+  };
+  gtk_widget_destroy(win);
+}
+
 /****************************************************************
 ... 
 *****************************************************************/
@@ -440,14 +456,11 @@
   option_dialog_shell = gtk_dialog_new_with_buttons(_("Set local options"),
        NULL,
        0,
-       GTK_STOCK_CANCEL,
-       GTK_RESPONSE_CANCEL,
-       GTK_STOCK_OK,
-       GTK_RESPONSE_OK,
+       GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+       GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
+       GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
        NULL);
   setup_dialog(option_dialog_shell, toplevel);
-  gtk_dialog_set_default_response(GTK_DIALOG(option_dialog_shell),
-                                 GTK_RESPONSE_OK);
   gtk_window_set_position (GTK_WINDOW(option_dialog_shell), GTK_WIN_POS_MOUSE);
 
   notebook = gtk_notebook_new();
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to