From 288bab41db775a4814b0b342872aecfffab4b69c Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Mon, 9 Aug 2010 23:29:21 +0000 Subject: [PATCH] Adding a preferences dialog to the panel --- include/Panel.h | 1 + po/fr.po | 36 +++++++++++++++---------- src/applets/main.c | 16 +++++++++-- src/common.h | 2 ++ src/panel.c | 66 +++++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 104 insertions(+), 17 deletions(-) diff --git a/include/Panel.h b/include/Panel.h index e710842..23d74da 100644 --- a/include/Panel.h +++ b/include/Panel.h @@ -37,6 +37,7 @@ typedef struct _PanelAppletHelper int (*logout_dialog)(void); void (*position_menu)(GtkMenu * menu, gint * x, gint * y, gboolean * push_in, gpointer data); + void (*preferences_dialog)(Panel * panel); int (*shutdown_dialog)(void); } PanelAppletHelper; diff --git a/po/fr.po b/po/fr.po index 78a9070..bc6e923 100644 --- a/po/fr.po +++ b/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Panel 0.0.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-10 00:58+0200\n" +"POT-Creation-Date: 2010-08-10 01:25+0200\n" "PO-Revision-Date: 2010-04-22 12:45+0200\n" "Last-Translator: Pierre Pronchery \n" "Language-Team: French\n" @@ -20,7 +20,7 @@ msgstr "" msgid "Unknown" msgstr "Inconnu" -#: ../src/applets/battery.c:182 ../src/panel.c:297 ../src/run.c:196 +#: ../src/applets/battery.c:182 ../src/panel.c:303 ../src/run.c:196 #: ../src/run.c:200 msgid "Error" msgstr "Erreur" @@ -54,7 +54,7 @@ msgstr "Fréquence :" msgid "Show desktop" msgstr "Afficher le bureau" -#: ../src/applets/lock.c:60 ../src/applets/main.c:301 +#: ../src/applets/lock.c:60 ../src/applets/main.c:304 msgid "Lock screen" msgstr "Verrouiller l'écran" @@ -62,28 +62,28 @@ msgstr "Verrouiller l'écran" msgid "Logging out is disabled" msgstr "" -#: ../src/applets/logout.c:67 ../src/panel.c:391 ../src/panel.c:396 -#: ../src/panel.c:404 +#: ../src/applets/logout.c:67 ../src/panel.c:448 ../src/panel.c:453 +#: ../src/panel.c:461 msgid "Logout" msgstr "Déconnexion" -#: ../src/applets/main.c:130 +#: ../src/applets/main.c:131 msgid "Main menu" msgstr "Menu principal" -#: ../src/applets/main.c:284 +#: ../src/applets/main.c:285 msgid "Applications" msgstr "Programmes" -#: ../src/applets/main.c:290 +#: ../src/applets/main.c:291 msgid "Run..." msgstr "Exécuter..." -#: ../src/applets/main.c:307 +#: ../src/applets/main.c:310 msgid "Logout..." msgstr "Déconnecter..." -#: ../src/applets/main.c:312 +#: ../src/applets/main.c:315 msgid "Shutdown..." msgstr "Arrêter..." @@ -135,25 +135,33 @@ msgstr "Déplacer vers le bureau" msgid "Maximize" msgstr "Maximiser" -#: ../src/panel.c:383 +#: ../src/panel.c:115 +msgid "Invalid panel size" +msgstr "Taille invalide pour le panel" + +#: ../src/panel.c:378 +msgid "Panel preferences" +msgstr "" + +#: ../src/panel.c:440 msgid "" "This will log you out of the current session, therefore closing any " "application currently opened and losing any unsaved data.\n" "Do you really want to proceed?" msgstr "" -#: ../src/panel.c:444 +#: ../src/panel.c:508 msgid "" "This will shutdown your computer, therefore closing any application " "currently opened and losing any unsaved data.\n" "Do you really want to proceed?" msgstr "" -#: ../src/panel.c:460 ../src/panel.c:465 ../src/panel.c:472 +#: ../src/panel.c:524 ../src/panel.c:529 ../src/panel.c:536 msgid "Shutdown" msgstr "Arrêter" -#: ../src/panel.c:464 +#: ../src/panel.c:528 msgid "Restart" msgstr "Redémarrer" diff --git a/src/applets/main.c b/src/applets/main.c index b5ed9ff..15036a4 100644 --- a/src/applets/main.c +++ b/src/applets/main.c @@ -87,6 +87,7 @@ static gboolean _on_idle(gpointer data); static void _on_lock(gpointer data); static void _on_logout(gpointer data); static void _on_run(void); +static void _on_preferences(gpointer data); static void _on_shutdown(gpointer data); static gboolean _on_timeout(gpointer data); @@ -288,13 +289,15 @@ static void _on_clicked(gpointer data) menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = _main_menuitem(_("Run..."), GTK_STOCK_EXECUTE); - g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(_on_run), - NULL); + g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK( + _on_run), NULL); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, NULL); + g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK( + _on_preferences), main); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); @@ -438,6 +441,15 @@ static void _on_logout(gpointer data) } +/* on_preferences */ +static void _on_preferences(gpointer data) +{ + Main * main = data; + + main->helper->preferences_dialog(main->helper->panel); +} + + /* on_run */ static void _on_run(void) { diff --git a/src/common.h b/src/common.h index 8106a31..73da8d3 100644 --- a/src/common.h +++ b/src/common.h @@ -54,4 +54,6 @@ void panel_delete(Panel * panel); int panel_error(Panel * panel, char const * message, int ret); int panel_load(Panel * panel, char const * applet); +void panel_show_preferences(Panel * panel, gboolean show); + # endif /* !PANEL_COMMON_H */ diff --git a/src/panel.c b/src/panel.c index 0d214e5..3c03737 100644 --- a/src/panel.c +++ b/src/panel.c @@ -49,6 +49,9 @@ struct _Panel GdkWindow * root; gint root_width; /* width of the root window */ gint root_height; /* height of the root window */ + + /* preferences */ + GtkWidget * pr_window; }; @@ -72,6 +75,7 @@ static int _panel_helper_logout_dialog(void); #endif static void _panel_helper_position_menu(GtkMenu * menu, gint * x, gint * y, gboolean * push_in, gpointer data); +static void _panel_helper_preferences_dialog(Panel * panel); static int _panel_helper_shutdown_dialog(void); @@ -108,7 +112,7 @@ Panel * panel_new(PanelPrefs * prefs) prefs->iconsize = PANEL_ICON_SIZE_LARGE; if(gtk_icon_size_lookup(prefs->iconsize, &panel->icon_width, &panel->icon_height) != TRUE) - error_set_print(PACKAGE, 0, "Invalid panel size"); + error_set_print(PACKAGE, 0, _("Invalid panel size")); panel->helper.panel = panel; panel->helper.config_get = _panel_helper_config_get; panel->helper.error = _panel_helper_error; @@ -119,6 +123,7 @@ Panel * panel_new(PanelPrefs * prefs) panel->helper.logout_dialog = NULL; #endif panel->helper.position_menu = _panel_helper_position_menu; + panel->helper.preferences_dialog = _panel_helper_preferences_dialog; panel->helper.shutdown_dialog = _panel_helper_shutdown_dialog; /* root window */ screen = gdk_screen_get_default(); @@ -136,6 +141,7 @@ Panel * panel_new(PanelPrefs * prefs) #endif /* panel */ g_idle_add(_on_idle, panel); + panel->pr_window = NULL; panel->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); panel->height = panel->icon_height + (PANEL_BORDER_WIDTH * 4); #ifdef DEBUG @@ -346,6 +352,57 @@ int panel_load(Panel * panel, char const * applet) } +/* panel_show_preferences */ +static gboolean _on_preferences_delete_event(gpointer data); + +void panel_show_preferences(Panel * panel, gboolean show) +{ + GtkWidget * vbox; + GtkWidget * bbox; + GtkWidget * widget; + + if(show == FALSE) + { + if(panel->pr_window != NULL) + gtk_widget_hide(panel->pr_window); + return; + } + if(panel->pr_window != NULL) + { + gtk_window_present(GTK_WINDOW(panel->pr_window)); + return; + } + panel->pr_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_container_set_border_width(GTK_CONTAINER(panel->pr_window), 4); + gtk_window_set_title(GTK_WINDOW(panel->pr_window), + _("Panel preferences")); + g_signal_connect_swapped(G_OBJECT(panel->pr_window), "delete-event", + G_CALLBACK(_on_preferences_delete_event), panel); + vbox = gtk_vbox_new(FALSE, 0); + /* FIXME implement */ + bbox = gtk_hbutton_box_new(); + gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); + gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 4); + widget = gtk_button_new_from_stock(GTK_STOCK_CANCEL); + /* FIXME connect callback */ + gtk_container_add(GTK_CONTAINER(bbox), widget); + widget = gtk_button_new_from_stock(GTK_STOCK_OK); + /* FIXME connect callback */ + gtk_container_add(GTK_CONTAINER(bbox), widget); + gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, TRUE, 0); + gtk_container_add(GTK_CONTAINER(panel->pr_window), vbox); + gtk_widget_show_all(panel->pr_window); +} + +static gboolean _on_preferences_delete_event(gpointer data) +{ + Panel * panel = data; + + gtk_widget_hide(panel->pr_window); + return TRUE; +} + + /* private */ /* functions */ /* helpers */ @@ -436,6 +493,13 @@ static void _panel_helper_position_menu(GtkMenu * menu, gint * x, gint * y, } +/* panel_helper_preferences_dialog */ +static void _panel_helper_preferences_dialog(Panel * panel) +{ + panel_show_preferences(panel, TRUE); +} + + /* panel_helper_shutdown_dialog */ static int _panel_helper_shutdown_dialog(void) {