Better handling of undefined window parameters
[xboard.git] / gtk / xoptions.c
index 2c48446..18fc857 100644 (file)
@@ -634,7 +634,7 @@ AddHandler (Option *opt, DialogClass dlg, int nr)
 GtkWidget *shells[NrOfDialogs];
 DialogClass parents[NrOfDialogs];
 WindowPlacement *wp[NrOfDialogs] = { // Beware! Order must correspond to DialogClass enum
-    NULL, &wpComment, &wpTags, NULL, NULL, NULL, NULL, &wpMoveHistory, &wpGameList, &wpEngineOutput, &wpEvalGraph,
+    NULL, &wpComment, &wpTags, NULL, NULL, NULL, &wpDualBoard, &wpMoveHistory, &wpGameList, &wpEngineOutput, &wpEvalGraph,
     NULL, NULL, NULL, NULL, &wpMain
 };
 
@@ -1105,6 +1105,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent
     if(dlgNr && dlgNr < PromoDlg && shells[dlgNr]) { // reusable, and used before (but popped down)
         gtk_widget_show(shells[dlgNr]);
         shellUp[dlgNr] = True;
+       if(wp[dlgNr]) gtk_window_move(GTK_WINDOW(shells[dlgNr]), wp[dlgNr]->x, wp[dlgNr]->y);
         return 0;
     }
 
@@ -1118,7 +1119,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent
 //        if(n > 50) width = 4; else if(n>24) width = 2; else width = 1;
        width = n / 20 + 1;
         height = n / width + 1;
-printf("n=%d, h=%d, w=%d\n",n,height,width);
+if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
 //     if(n && (currentOption[n-1].type == Button || currentOption[n-1].type == SaveButton)) currentOption[n].min = SAME_ROW; // OK on same line
         currentOption[n].type = EndMark; currentOption[n].target = NULL; // delimit list by callback-less end mark
     }
@@ -1136,6 +1137,7 @@ printf("n=%d, h=%d, w=%d\n",n,height,width);
     if(topLevel)
       {
        dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+       gtk_window_set_title(GTK_WINDOW(dialog), title);
        box = gtk_vbox_new(FALSE,0);
        gtk_container_add (GTK_CONTAINER (dialog), box);
       }
@@ -1505,27 +1507,29 @@ printf("n=%d, h=%d, w=%d\n",n,height,width);
 
     /* hide OK/cancel buttons */
     if(!topLevel)
-      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",
+      {
+       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",
                       G_CALLBACK (GenericPopDown),
                       (gpointer)(intptr_t) dlgNr);
+      }
+
     g_signal_connect (dialog, "delete-event",
                       G_CALLBACK (GenericPopDown),
                       (gpointer)(intptr_t) dlgNr);
     shellUp[dlgNr]++;
 
-    if(dlgNr && wp[dlgNr] && wp[dlgNr]->width > 0) { // if persistent window-info available, reposition
+    if(dlgNr && wp[dlgNr]) { // if persistent window-info available, reposition
+      if(wp[dlgNr]->x > 0 && wp[dlgNr]->y > 0)
        gtk_window_move(GTK_WINDOW(dialog), wp[dlgNr]->x, wp[dlgNr]->y);
-//printf("moved %d to (%d,%d)\n", dlgNr, wp[dlgNr]->x, wp[dlgNr]->y);
+      if(wp[dlgNr]->width > 0 && wp[dlgNr]->height > 0)
        gtk_window_resize(GTK_WINDOW(dialog), wp[dlgNr]->width, wp[dlgNr]->height);
-//printf("resized %d to %dx%d\n", dlgNr, wp[dlgNr]->width, wp[dlgNr]->height);
     }
 
     return 1; // tells caller he must do initialization (e.g. add specific event handlers)