From 4b5c2b21671c841b193460b93af9c8f6fe466649 Mon Sep 17 00:00:00 2001 From: plombo Date: Mon, 28 Mar 2011 02:58:57 +0000 Subject: [PATCH] gtk: make all config dialogs be GtkDialogs rather than toplevel windows --- src/drivers/sdl/gui.cpp | 88 +++++++++++++++++++++++++---------------- 1 file changed, 54 insertions(+), 34 deletions(-) diff --git a/src/drivers/sdl/gui.cpp b/src/drivers/sdl/gui.cpp index 703eb99c..5f346ad4 100644 --- a/src/drivers/sdl/gui.cpp +++ b/src/drivers/sdl/gui.cpp @@ -83,6 +83,11 @@ int configGamepadButton(GtkButton* button, gpointer p) return 0; } +void closeDialog(GtkWidget* w, GdkEvent* e, gpointer p) +{ + gtk_widget_destroy(w); +} + void toggleLowPass(GtkWidget* w, gpointer p) { if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))) @@ -190,11 +195,14 @@ void openPaletteConfig() GtkWidget* hueFrame; GtkWidget* hueHscale; - win = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(win),"Palette Options"); + win = gtk_dialog_new_with_buttons("Palette Options", + GTK_WINDOW(MainWindow), + (GtkDialogFlags)(GTK_DIALOG_DESTROY_WITH_PARENT), + GTK_STOCK_CLOSE, + GTK_RESPONSE_OK, + NULL); gtk_window_set_icon_name(GTK_WINDOW(win), GTK_STOCK_SELECT_COLOR); - vbox = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(win), vbox); + vbox = gtk_dialog_get_content_area(GTK_DIALOG(win)); paletteFrame = gtk_frame_new("Custom palette: "); paletteHbox = gtk_hbox_new(FALSE, 5); @@ -263,9 +271,11 @@ void openPaletteConfig() gtk_box_pack_start(GTK_BOX(slidersVbox), hueFrame, FALSE, TRUE, 5); gtk_box_pack_start(GTK_BOX(vbox), paletteFrame, FALSE, TRUE, 5); - gtk_box_pack_start(GTK_BOX(vbox), slidersFrame, FALSE, TRUE, 5); + g_signal_connect(GTK_OBJECT(win), "delete-event", G_CALLBACK(closeDialog), NULL); + g_signal_connect(GTK_OBJECT(win), "response", G_CALLBACK(closeDialog), NULL); + gtk_widget_show_all(win); return; @@ -286,14 +296,10 @@ void launchNet(GtkWidget* w, gpointer p) g_config->setOption("SDL.NetworkPassword", pw); g_config->setOption("SDL.NetworkPort", port); - gtk_widget_destroy(GTK_WIDGET(p)); + gtk_widget_destroy(GTK_WIDGET(w)); loadGame(); } -void closeNet(GtkWidget* w, gpointer p) -{ - gtk_widget_destroy(GTK_WIDGET(p)); -} void setUsername(GtkWidget* w, gpointer p) { @@ -301,6 +307,14 @@ void setUsername(GtkWidget* w, gpointer p) g_config->setOption("SDL.NetworkUsername", s); } +void netResponse(GtkWidget* w, gint response_id, gpointer p) +{ + if(response_id == GTK_RESPONSE_OK) + launchNet(w, p); + else + gtk_widget_destroy(w); +} + void openNetworkConfig() { GtkWidget* win; @@ -320,14 +334,16 @@ void openNetworkConfig() GtkWidget* pwBox; GtkWidget* pwLbl; - GtkWidget* bb; - GtkWidget* conBtn; - GtkWidget* closeBtn; - - win = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(win), "Network Options"); + win = gtk_dialog_new_with_buttons("Network Options", + GTK_WINDOW(MainWindow), + (GtkDialogFlags)(GTK_DIALOG_DESTROY_WITH_PARENT), + GTK_STOCK_CLOSE, + GTK_RESPONSE_CLOSE, + GTK_STOCK_CONNECT, + GTK_RESPONSE_OK, + NULL); gtk_window_set_icon_name(GTK_WINDOW(win), GTK_STOCK_NETWORK); - box = gtk_vbox_new(FALSE, 3); + box = gtk_dialog_get_content_area(GTK_DIALOG(win)); userBox = gtk_hbox_new(FALSE, 3); userLbl = gtk_label_new("Username:"); @@ -351,9 +367,6 @@ void openNetworkConfig() pwBox = gtk_hbox_new(FALSE, 3); pwLbl = gtk_label_new("Server password:"); pwEntry = gtk_entry_new(); - bb = gtk_hbox_new(FALSE, 5); - conBtn = gtk_button_new_from_stock(GTK_STOCK_CONNECT); - closeBtn = gtk_button_new_from_stock(GTK_STOCK_CLOSE); gtk_spin_button_set_value(GTK_SPIN_BUTTON(portSpin), 4046); @@ -378,16 +391,11 @@ void openNetworkConfig() gtk_box_pack_start_defaults(GTK_BOX(box), userBox); gtk_box_pack_start_defaults(GTK_BOX(box), frame); - gtk_box_pack_start(GTK_BOX(bb), closeBtn, FALSE, FALSE, 5); - gtk_box_pack_start(GTK_BOX(bb), conBtn, FALSE, FALSE, 5); - - gtk_box_pack_start_defaults(GTK_BOX(box), bb); - gtk_container_add(GTK_CONTAINER(win), box); gtk_widget_show_all(win); - g_signal_connect(closeBtn, "clicked", G_CALLBACK(closeNet), win); - g_signal_connect(conBtn, "clicked", G_CALLBACK(launchNet), win); + g_signal_connect(GTK_OBJECT(win), "delete-event", G_CALLBACK(closeDialog), NULL); + g_signal_connect(GTK_OBJECT(win), "response", G_CALLBACK(netResponse), NULL); } // creates and opens hotkey config window @@ -724,12 +732,16 @@ void openVideoConfig() GtkWidget* yscaleHbox; - win = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(win), "Video Preferences"); + win = gtk_dialog_new_with_buttons("Video Preferences", + GTK_WINDOW(MainWindow), + (GtkDialogFlags)(GTK_DIALOG_DESTROY_WITH_PARENT), + GTK_STOCK_CLOSE, + GTK_RESPONSE_OK, + NULL); gtk_window_set_icon_name(GTK_WINDOW(win), "video-display"); //gtk_widget_set_size_request(win, 250, 250); - vbox = gtk_vbox_new(FALSE, 5); + vbox = gtk_dialog_get_content_area(GTK_DIALOG(win)); lbl = gtk_label_new("Video options will not take\neffect until the emulator is restarted."); @@ -849,8 +861,9 @@ void openVideoConfig() gtk_box_pack_start(GTK_BOX(vbox), xscaleHbox, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), yscaleHbox, FALSE, FALSE, 5); + g_signal_connect(GTK_OBJECT(win), "delete-event", G_CALLBACK(closeDialog), NULL); + g_signal_connect(GTK_OBJECT(win), "response", G_CALLBACK(closeDialog), NULL); - gtk_container_add(GTK_CONTAINER(win), vbox); gtk_widget_show_all(win); return; @@ -919,8 +932,12 @@ void openSoundConfig() GtkWidget* mixerFrames[6]; - win = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(win), "Sound Preferences"); + win = gtk_dialog_new_with_buttons("Sound Preferences", + GTK_WINDOW(MainWindow), + (GtkDialogFlags)(GTK_DIALOG_DESTROY_WITH_PARENT), + GTK_STOCK_CLOSE, + GTK_RESPONSE_OK, + NULL); gtk_window_set_icon_name(GTK_WINDOW(win), "audio-x-generic"); main_hbox = gtk_hbox_new(FALSE, 15); vbox = gtk_vbox_new(False, 5); @@ -1058,7 +1075,10 @@ void openSoundConfig() gtk_box_pack_start(GTK_BOX(main_hbox), mixerFrame, TRUE, TRUE, 5); gtk_container_add(GTK_CONTAINER(mixerFrame), mixerHbox); - gtk_container_add(GTK_CONTAINER(win), main_hbox); + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(win))), main_hbox, TRUE, TRUE, 0); + + g_signal_connect(GTK_OBJECT(win), "delete-event", G_CALLBACK(closeDialog), NULL); + g_signal_connect(GTK_OBJECT(win), "response", G_CALLBACK(closeDialog), NULL); gtk_widget_show_all(win);