Adding a preferences dialog to the panel

This commit is contained in:
Pierre Pronchery 2010-08-09 23:29:21 +00:00
parent 6bc347e88b
commit 288bab41db
5 changed files with 104 additions and 17 deletions

View File

@ -37,6 +37,7 @@ typedef struct _PanelAppletHelper
int (*logout_dialog)(void); int (*logout_dialog)(void);
void (*position_menu)(GtkMenu * menu, gint * x, gint * y, void (*position_menu)(GtkMenu * menu, gint * x, gint * y,
gboolean * push_in, gpointer data); gboolean * push_in, gpointer data);
void (*preferences_dialog)(Panel * panel);
int (*shutdown_dialog)(void); int (*shutdown_dialog)(void);
} PanelAppletHelper; } PanelAppletHelper;

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Panel 0.0.5\n" "Project-Id-Version: Panel 0.0.5\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2010-04-22 12:45+0200\n"
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n" "Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
"Language-Team: French\n" "Language-Team: French\n"
@ -20,7 +20,7 @@ msgstr ""
msgid "Unknown" msgid "Unknown"
msgstr "Inconnu" 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 #: ../src/run.c:200
msgid "Error" msgid "Error"
msgstr "Erreur" msgstr "Erreur"
@ -54,7 +54,7 @@ msgstr "Fréquence :"
msgid "Show desktop" msgid "Show desktop"
msgstr "Afficher le bureau" 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" msgid "Lock screen"
msgstr "Verrouiller l'écran" msgstr "Verrouiller l'écran"
@ -62,28 +62,28 @@ msgstr "Verrouiller l'écran"
msgid "Logging out is disabled" msgid "Logging out is disabled"
msgstr "" msgstr ""
#: ../src/applets/logout.c:67 ../src/panel.c:391 ../src/panel.c:396 #: ../src/applets/logout.c:67 ../src/panel.c:448 ../src/panel.c:453
#: ../src/panel.c:404 #: ../src/panel.c:461
msgid "Logout" msgid "Logout"
msgstr "Déconnexion" msgstr "Déconnexion"
#: ../src/applets/main.c:130 #: ../src/applets/main.c:131
msgid "Main menu" msgid "Main menu"
msgstr "Menu principal" msgstr "Menu principal"
#: ../src/applets/main.c:284 #: ../src/applets/main.c:285
msgid "Applications" msgid "Applications"
msgstr "Programmes" msgstr "Programmes"
#: ../src/applets/main.c:290 #: ../src/applets/main.c:291
msgid "Run..." msgid "Run..."
msgstr "Exécuter..." msgstr "Exécuter..."
#: ../src/applets/main.c:307 #: ../src/applets/main.c:310
msgid "Logout..." msgid "Logout..."
msgstr "Déconnecter..." msgstr "Déconnecter..."
#: ../src/applets/main.c:312 #: ../src/applets/main.c:315
msgid "Shutdown..." msgid "Shutdown..."
msgstr "Arrêter..." msgstr "Arrêter..."
@ -135,25 +135,33 @@ msgstr "Déplacer vers le bureau"
msgid "Maximize" msgid "Maximize"
msgstr "Maximiser" 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 "" msgid ""
"This will log you out of the current session, therefore closing any " "This will log you out of the current session, therefore closing any "
"application currently opened and losing any unsaved data.\n" "application currently opened and losing any unsaved data.\n"
"Do you really want to proceed?" "Do you really want to proceed?"
msgstr "" msgstr ""
#: ../src/panel.c:444 #: ../src/panel.c:508
msgid "" msgid ""
"This will shutdown your computer, therefore closing any application " "This will shutdown your computer, therefore closing any application "
"currently opened and losing any unsaved data.\n" "currently opened and losing any unsaved data.\n"
"Do you really want to proceed?" "Do you really want to proceed?"
msgstr "" 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" msgid "Shutdown"
msgstr "Arrêter" msgstr "Arrêter"
#: ../src/panel.c:464 #: ../src/panel.c:528
msgid "Restart" msgid "Restart"
msgstr "Redémarrer" msgstr "Redémarrer"

View File

@ -87,6 +87,7 @@ static gboolean _on_idle(gpointer data);
static void _on_lock(gpointer data); static void _on_lock(gpointer data);
static void _on_logout(gpointer data); static void _on_logout(gpointer data);
static void _on_run(void); static void _on_run(void);
static void _on_preferences(gpointer data);
static void _on_shutdown(gpointer data); static void _on_shutdown(gpointer data);
static gboolean _on_timeout(gpointer data); static gboolean _on_timeout(gpointer data);
@ -288,13 +289,15 @@ static void _on_clicked(gpointer data)
menuitem = gtk_separator_menu_item_new(); menuitem = gtk_separator_menu_item_new();
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
menuitem = _main_menuitem(_("Run..."), GTK_STOCK_EXECUTE); menuitem = _main_menuitem(_("Run..."), GTK_STOCK_EXECUTE);
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(_on_run), g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK(
NULL); _on_run), NULL);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
menuitem = gtk_separator_menu_item_new(); menuitem = gtk_separator_menu_item_new();
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, menuitem = gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES,
NULL); NULL);
g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK(
_on_preferences), main);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
menuitem = gtk_separator_menu_item_new(); menuitem = gtk_separator_menu_item_new();
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 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 */ /* on_run */
static void _on_run(void) static void _on_run(void)
{ {

View File

@ -54,4 +54,6 @@ void panel_delete(Panel * panel);
int panel_error(Panel * panel, char const * message, int ret); int panel_error(Panel * panel, char const * message, int ret);
int panel_load(Panel * panel, char const * applet); int panel_load(Panel * panel, char const * applet);
void panel_show_preferences(Panel * panel, gboolean show);
# endif /* !PANEL_COMMON_H */ # endif /* !PANEL_COMMON_H */

View File

@ -49,6 +49,9 @@ struct _Panel
GdkWindow * root; GdkWindow * root;
gint root_width; /* width of the root window */ gint root_width; /* width of the root window */
gint root_height; /* height 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 #endif
static void _panel_helper_position_menu(GtkMenu * menu, gint * x, gint * y, static void _panel_helper_position_menu(GtkMenu * menu, gint * x, gint * y,
gboolean * push_in, gpointer data); gboolean * push_in, gpointer data);
static void _panel_helper_preferences_dialog(Panel * panel);
static int _panel_helper_shutdown_dialog(void); static int _panel_helper_shutdown_dialog(void);
@ -108,7 +112,7 @@ Panel * panel_new(PanelPrefs * prefs)
prefs->iconsize = PANEL_ICON_SIZE_LARGE; prefs->iconsize = PANEL_ICON_SIZE_LARGE;
if(gtk_icon_size_lookup(prefs->iconsize, &panel->icon_width, if(gtk_icon_size_lookup(prefs->iconsize, &panel->icon_width,
&panel->icon_height) != TRUE) &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.panel = panel;
panel->helper.config_get = _panel_helper_config_get; panel->helper.config_get = _panel_helper_config_get;
panel->helper.error = _panel_helper_error; panel->helper.error = _panel_helper_error;
@ -119,6 +123,7 @@ Panel * panel_new(PanelPrefs * prefs)
panel->helper.logout_dialog = NULL; panel->helper.logout_dialog = NULL;
#endif #endif
panel->helper.position_menu = _panel_helper_position_menu; panel->helper.position_menu = _panel_helper_position_menu;
panel->helper.preferences_dialog = _panel_helper_preferences_dialog;
panel->helper.shutdown_dialog = _panel_helper_shutdown_dialog; panel->helper.shutdown_dialog = _panel_helper_shutdown_dialog;
/* root window */ /* root window */
screen = gdk_screen_get_default(); screen = gdk_screen_get_default();
@ -136,6 +141,7 @@ Panel * panel_new(PanelPrefs * prefs)
#endif #endif
/* panel */ /* panel */
g_idle_add(_on_idle, panel); g_idle_add(_on_idle, panel);
panel->pr_window = NULL;
panel->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); panel->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
panel->height = panel->icon_height + (PANEL_BORDER_WIDTH * 4); panel->height = panel->icon_height + (PANEL_BORDER_WIDTH * 4);
#ifdef DEBUG #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 */ /* private */
/* functions */ /* functions */
/* helpers */ /* 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 */ /* panel_helper_shutdown_dialog */
static int _panel_helper_shutdown_dialog(void) static int _panel_helper_shutdown_dialog(void)
{ {