No longer using gtk_dialog_run() for helper windows

This commit is contained in:
Pierre Pronchery 2011-02-24 12:02:55 +00:00
parent 2160c6baf7
commit 4ecb017600
5 changed files with 151 additions and 79 deletions

View File

@ -37,11 +37,11 @@ typedef struct _PanelAppletHelper
char const * variable, char const * value); char const * variable, char const * value);
int (*error)(Panel * panel, char const * message, int ret); int (*error)(Panel * panel, char const * message, int ret);
void (*about_dialog)(Panel * panel); void (*about_dialog)(Panel * panel);
int (*logout_dialog)(void); void (*logout_dialog)(Panel * panel);
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); void (*preferences_dialog)(Panel * panel);
int (*shutdown_dialog)(Panel * panel); void (*shutdown_dialog)(Panel * panel);
int (*suspend)(Panel * panel); int (*suspend)(Panel * panel);
} 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: 2011-02-05 12:58+0100\n" "POT-Creation-Date: 2011-02-24 13:01+0100\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:186 ../src/panel.c:385 ../src/panel.c:390 #: ../src/applets/battery.c:186 ../src/panel.c:391 ../src/panel.c:396
#: ../src/run.c:200 ../src/run.c:206 #: ../src/run.c:200 ../src/run.c:206
msgid "Error" msgid "Error"
msgstr "Erreur" msgstr "Erreur"
@ -83,8 +83,8 @@ msgstr "Verrouiller l'écran"
msgid "Logging out is disabled" msgid "Logging out is disabled"
msgstr "Se déconnecter est désactivé" msgstr "Se déconnecter est désactivé"
#: ../src/applets/logout.c:70 ../src/panel.c:702 ../src/panel.c:709 #: ../src/applets/logout.c:70 ../src/panel.c:728 ../src/panel.c:735
#: ../src/panel.c:717 #: ../src/panel.c:744
msgid "Logout" msgid "Logout"
msgstr "Déconnexion" msgstr "Déconnexion"
@ -172,35 +172,35 @@ msgid ""
" -x\tUse icons the size of menus\n" " -x\tUse icons the size of menus\n"
msgstr "" msgstr ""
#: ../src/panel.c:93 #: ../src/panel.c:97
msgid "large" msgid "large"
msgstr "grande" msgstr "grande"
#: ../src/panel.c:94 #: ../src/panel.c:98
msgid "small" msgid "small"
msgstr "petite" msgstr "petite"
#: ../src/panel.c:95 #: ../src/panel.c:99
msgid "smaller" msgid "smaller"
msgstr "très petite" msgstr "très petite"
#: ../src/panel.c:469 #: ../src/panel.c:489
msgid "Panel preferences" msgid "Panel preferences"
msgstr "Préférences du Panel" msgstr "Préférences du Panel"
#: ../src/panel.c:484 #: ../src/panel.c:504
msgid "Top size:" msgid "Top size:"
msgstr "Taille du haut :" msgstr "Taille du haut :"
#: ../src/panel.c:495 #: ../src/panel.c:515
msgid "Bottom size:" msgid "Bottom size:"
msgstr "Taille du bas :" msgstr "Taille du bas :"
#: ../src/panel.c:506 #: ../src/panel.c:526
msgid "General" msgid "General"
msgstr "Générales" msgstr "Générales"
#: ../src/panel.c:692 #: ../src/panel.c:714
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"
@ -211,7 +211,7 @@ msgstr ""
"sauvegardées.\n" "sauvegardées.\n"
"Voulez-vous continuer?" "Voulez-vous continuer?"
#: ../src/panel.c:786 #: ../src/panel.c:831
msgid "" msgid ""
"This will shutdown your device, therefore closing any application currently " "This will shutdown your device, therefore closing any application currently "
"opened and losing any unsaved data.\n" "opened and losing any unsaved data.\n"
@ -222,7 +222,7 @@ msgstr ""
"sauvegardées.\n" "sauvegardées.\n"
"Voulez-vous continuer?" "Voulez-vous continuer?"
#: ../src/panel.c:791 #: ../src/panel.c:836
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"
@ -233,11 +233,11 @@ msgstr ""
"sauvegardées.\n" "sauvegardées.\n"
"Voulez-vous continuer?" "Voulez-vous continuer?"
#: ../src/panel.c:812 ../src/panel.c:819 ../src/panel.c:826 #: ../src/panel.c:850 ../src/panel.c:857 ../src/panel.c:866
msgid "Shutdown" msgid "Shutdown"
msgstr "Arrêter" msgstr "Arrêter"
#: ../src/panel.c:818 #: ../src/panel.c:856
msgid "Restart" msgid "Restart"
msgstr "Redémarrer" msgstr "Redémarrer"

View File

@ -82,5 +82,5 @@ static void _on_clicked(gpointer data)
{ {
PanelApplet * applet = data; PanelApplet * applet = data;
applet->helper->logout_dialog(); applet->helper->logout_dialog(applet->helper->panel);
} }

View File

@ -87,7 +87,7 @@ static void _on_clicked(gpointer data);
static gboolean _on_idle(gpointer data); 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(gpointer data);
static void _on_shutdown(gpointer data); static void _on_shutdown(gpointer data);
static void _on_suspend(gpointer data); static void _on_suspend(gpointer data);
static gboolean _on_timeout(gpointer data); static gboolean _on_timeout(gpointer data);
@ -303,7 +303,7 @@ static void _on_clicked(gpointer data)
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_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK( g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK(
_on_run), NULL); _on_run), 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);
@ -447,7 +447,7 @@ static void _on_lock(gpointer data)
if((p = helper->config_get(helper->panel, "lock", "command")) != NULL) if((p = helper->config_get(helper->panel, "lock", "command")) != NULL)
command = p; command = p;
if(g_spawn_command_line_async(command, &error) != TRUE) if(g_spawn_command_line_async(command, &error) != TRUE)
helper->error(NULL, error->message, 0); helper->error(helper->panel, error->message, 1);
} }
@ -456,19 +456,23 @@ static void _on_logout(gpointer data)
{ {
Main * main = data; Main * main = data;
main->helper->logout_dialog(); main->helper->logout_dialog(main->helper->panel);
} }
/* on_run */ /* on_run */
static void _on_run(void) static void _on_run(gpointer data)
{ {
Main * main = data;
char * argv[] = { "run", NULL }; char * argv[] = { "run", NULL };
GSpawnFlags flags = G_SPAWN_SEARCH_PATH GSpawnFlags flags = G_SPAWN_SEARCH_PATH
| G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDOUT_TO_DEV_NULL
| G_SPAWN_STDERR_TO_DEV_NULL; | G_SPAWN_STDERR_TO_DEV_NULL;
GError * error = NULL;
g_spawn_async(NULL, argv, NULL, flags, NULL, NULL, NULL, NULL); if(g_spawn_async(NULL, argv, NULL, flags, NULL, NULL, NULL, &error)
!= TRUE)
main->helper->error(main->helper->panel, error->message, 1);
} }

View File

@ -70,8 +70,12 @@ struct _Panel
GtkWidget * pr_bottom_size; GtkWidget * pr_bottom_size;
GtkWidget * pr_top_size; GtkWidget * pr_top_size;
/* about */ /* dialogs */
GtkWidget * ab_window; GtkWidget * ab_window;
#ifndef EMBEDDED
GtkWidget * lo_window;
#endif
GtkWidget * sh_window;
}; };
@ -107,7 +111,7 @@ static int _panel_helper_config_set(Panel * panel, char const * section,
static int _panel_helper_error(Panel * panel, char const * message, int ret); static int _panel_helper_error(Panel * panel, char const * message, int ret);
static void _panel_helper_about_dialog(Panel * panel); static void _panel_helper_about_dialog(Panel * panel);
#ifndef EMBEDDED #ifndef EMBEDDED
static int _panel_helper_logout_dialog(void); static void _panel_helper_logout_dialog(Panel * panel);
#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, PanelPosition position, gpointer data); gboolean * push_in, PanelPosition position, gpointer data);
@ -116,7 +120,7 @@ static void _panel_helper_position_menu_bottom(GtkMenu * menu, gint * x,
static void _panel_helper_position_menu_top(GtkMenu * menu, gint * x, gint * y, static void _panel_helper_position_menu_top(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 void _panel_helper_preferences_dialog(Panel * panel);
static int _panel_helper_shutdown_dialog(Panel * panel); static void _panel_helper_shutdown_dialog(Panel * panel);
static int _panel_helper_suspend(Panel * panel); static int _panel_helper_suspend(Panel * panel);
static char * _config_get_filename(void); static char * _config_get_filename(void);
@ -372,6 +376,8 @@ void panel_delete(Panel * panel)
/* useful */ /* useful */
/* panel_error */ /* panel_error */
static int _error_text(char const * message, int ret); static int _error_text(char const * message, int ret);
static gboolean _error_on_closex(GtkWidget * widget);
static void _error_on_response(GtkWidget * widget);
int panel_error(Panel * panel, char const * message, int ret) int panel_error(Panel * panel, char const * message, int ret)
{ {
@ -388,8 +394,11 @@ int panel_error(Panel * panel, char const * message, int ret)
"%s: %s", message, strerror(errno)); "%s: %s", message, strerror(errno));
gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ALWAYS); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ALWAYS);
gtk_window_set_title(GTK_WINDOW(dialog), _("Error")); gtk_window_set_title(GTK_WINDOW(dialog), _("Error"));
gtk_dialog_run(GTK_DIALOG(dialog)); g_signal_connect(G_OBJECT(dialog), "delete-event", G_CALLBACK(
gtk_widget_destroy(dialog); _error_on_closex), NULL);
g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(
_error_on_response), NULL);
gtk_widget_show_all(dialog);
return ret; return ret;
} }
@ -400,6 +409,17 @@ static int _error_text(char const * message, int ret)
return ret; return ret;
} }
static gboolean _error_on_closex(GtkWidget * widget)
{
gtk_widget_hide(widget);
return FALSE;
}
static void _error_on_response(GtkWidget * widget)
{
gtk_widget_destroy(widget);
}
/* panel_load */ /* panel_load */
int panel_load(Panel * panel, PanelPosition position, char const * applet) int panel_load(Panel * panel, PanelPosition position, char const * applet)
@ -686,41 +706,62 @@ static gboolean _about_on_closex(gpointer data)
#ifndef EMBEDDED #ifndef EMBEDDED
/* panel_helper_logout_dialog */ /* panel_helper_logout_dialog */
static int _panel_helper_logout_dialog(void) static gboolean _logout_dialog_on_closex(gpointer data);
static void _logout_dialog_on_response(GtkWidget * widget, gint response);
static void _panel_helper_logout_dialog(Panel * panel)
{ {
GtkWidget * dialog;
const char * message = _("This will log you out of the current session," const char * message = _("This will log you out of the current session,"
" therefore closing any application currently opened" " therefore closing any application currently opened"
" and losing any unsaved data.\n" " and losing any unsaved data.\n"
"Do you really want to proceed?"); "Do you really want to proceed?");
GtkWidget * widget; GtkWidget * widget;
int res;
dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_INFO, if(panel->lo_window != NULL)
GTK_BUTTONS_NONE, "%s", {
gtk_window_present(GTK_WINDOW(panel->lo_window));
return;
}
panel->lo_window = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_INFO,
GTK_BUTTONS_NONE,
#if GTK_CHECK_VERSION(2, 6, 0) #if GTK_CHECK_VERSION(2, 6, 0)
_("Logout")); "%s", _("Logout"));
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(
"%s", panel->lo_window),
#endif #endif
message); "%s", message);
gtk_dialog_add_buttons(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, gtk_dialog_add_buttons(GTK_DIALOG(panel->lo_window), GTK_STOCK_CANCEL,
GTK_RESPONSE_CANCEL, NULL); GTK_RESPONSE_CANCEL, NULL);
widget = gtk_button_new_with_label(_("Logout")); widget = gtk_button_new_with_label(_("Logout"));
gtk_button_set_image(GTK_BUTTON(widget), gtk_image_new_from_icon_name( gtk_button_set_image(GTK_BUTTON(widget), gtk_image_new_from_icon_name(
"gnome-logout", GTK_ICON_SIZE_BUTTON)); "gnome-logout", GTK_ICON_SIZE_BUTTON));
gtk_widget_show_all(widget); gtk_widget_show_all(widget);
gtk_dialog_add_action_widget(GTK_DIALOG(dialog), widget, gtk_dialog_add_action_widget(GTK_DIALOG(panel->lo_window), widget,
GTK_RESPONSE_ACCEPT); GTK_RESPONSE_ACCEPT);
gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE); gtk_window_set_keep_above(GTK_WINDOW(panel->lo_window), TRUE);
gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ALWAYS); gtk_window_set_position(GTK_WINDOW(panel->lo_window),
gtk_window_set_title(GTK_WINDOW(dialog), _("Logout")); GTK_WIN_POS_CENTER_ALWAYS);
res = gtk_dialog_run(GTK_DIALOG(dialog)); gtk_window_set_title(GTK_WINDOW(panel->lo_window), _("Logout"));
gtk_widget_destroy(dialog); g_signal_connect(G_OBJECT(panel->lo_window), "delete-event", G_CALLBACK(
if(res != GTK_RESPONSE_ACCEPT) _logout_dialog_on_closex), panel);
return 1; g_signal_connect(G_OBJECT(panel->lo_window), "response", G_CALLBACK(
gtk_main_quit(); _logout_dialog_on_response), panel);
return 0; gtk_widget_show_all(panel->lo_window);
}
static gboolean _logout_dialog_on_closex(gpointer data)
{
Panel * panel = data;
gtk_widget_hide(panel->lo_window);
return TRUE;
}
static void _logout_dialog_on_response(GtkWidget * widget, gint response)
{
gtk_widget_hide(widget);
if(response == GTK_RESPONSE_ACCEPT)
gtk_main_quit();
} }
#endif #endif
@ -778,9 +819,13 @@ static void _panel_helper_preferences_dialog(Panel * panel)
/* panel_helper_shutdown_dialog */ /* panel_helper_shutdown_dialog */
static int _panel_helper_shutdown_dialog(Panel * panel) static gboolean _shutdown_dialog_on_closex(gpointer data);
static void _shutdown_dialog_on_response(GtkWidget * widget, gint response,
gpointer data);
enum { RES_CANCEL, RES_REBOOT, RES_SHUTDOWN };
static void _panel_helper_shutdown_dialog(Panel * panel)
{ {
GtkWidget * dialog;
GtkWidget * widget; GtkWidget * widget;
#ifdef EMBEDDED #ifdef EMBEDDED
const char * message = _("This will shutdown your device," const char * message = _("This will shutdown your device,"
@ -793,8 +838,51 @@ static int _panel_helper_shutdown_dialog(Panel * panel)
" and losing any unsaved data.\n" " and losing any unsaved data.\n"
"Do you really want to proceed?"); "Do you really want to proceed?");
#endif #endif
enum { RES_CANCEL, RES_REBOOT, RES_SHUTDOWN };
int res; if(panel->sh_window != NULL)
{
gtk_window_present(GTK_WINDOW(panel->sh_window));
return;
}
panel->sh_window = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_INFO,
GTK_BUTTONS_NONE, "%s",
#if GTK_CHECK_VERSION(2, 6, 0)
_("Shutdown"));
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(
panel->sh_window),
#endif
"%s", message);
gtk_dialog_add_buttons(GTK_DIALOG(panel->sh_window), GTK_STOCK_CANCEL,
RES_CANCEL, _("Restart"), RES_REBOOT, NULL);
widget = gtk_button_new_with_label(_("Shutdown"));
gtk_button_set_image(GTK_BUTTON(widget), gtk_image_new_from_icon_name(
"gnome-shutdown", GTK_ICON_SIZE_BUTTON));
gtk_widget_show_all(widget);
gtk_dialog_add_action_widget(GTK_DIALOG(panel->sh_window), widget,
RES_SHUTDOWN);
gtk_window_set_keep_above(GTK_WINDOW(panel->sh_window), TRUE);
gtk_window_set_position(GTK_WINDOW(panel->sh_window),
GTK_WIN_POS_CENTER_ALWAYS);
gtk_window_set_title(GTK_WINDOW(panel->sh_window), _("Shutdown"));
g_signal_connect(G_OBJECT(panel->lo_window), "delete-event", G_CALLBACK(
_shutdown_dialog_on_closex), panel);
g_signal_connect(G_OBJECT(panel->lo_window), "response", G_CALLBACK(
_shutdown_dialog_on_response), panel);
gtk_widget_show_all(panel->lo_window);
}
static gboolean _shutdown_dialog_on_closex(gpointer data)
{
Panel * panel = data;
gtk_widget_hide(panel->sh_window);
return TRUE;
}
static void _shutdown_dialog_on_response(GtkWidget * widget, gint response,
gpointer data)
{
Panel * panel = data;
char * reboot[] = { "/sbin/shutdown", "shutdown", "-r", "now", NULL }; char * reboot[] = { "/sbin/shutdown", "shutdown", "-r", "now", NULL };
char * shutdown[] = { "/sbin/shutdown", "shutdown", char * shutdown[] = { "/sbin/shutdown", "shutdown",
#ifdef __NetBSD__ #ifdef __NetBSD__
@ -806,36 +894,16 @@ static int _panel_helper_shutdown_dialog(Panel * panel)
char ** argv; char ** argv;
GError * error = NULL; GError * error = NULL;
dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_INFO, gtk_widget_hide(widget);
GTK_BUTTONS_NONE, "%s", if(response == RES_SHUTDOWN)
#if GTK_CHECK_VERSION(2, 6, 0)
_("Shutdown"));
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
"%s",
#endif
message);
gtk_dialog_add_buttons(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, RES_CANCEL,
_("Restart"), RES_REBOOT, NULL);
widget = gtk_button_new_with_label(_("Shutdown"));
gtk_button_set_image(GTK_BUTTON(widget), gtk_image_new_from_icon_name(
"gnome-shutdown", GTK_ICON_SIZE_BUTTON));
gtk_widget_show_all(widget);
gtk_dialog_add_action_widget(GTK_DIALOG(dialog), widget, RES_SHUTDOWN);
gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE);
gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ALWAYS);
gtk_window_set_title(GTK_WINDOW(dialog), _("Shutdown"));
res = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
if(res == RES_SHUTDOWN)
argv = shutdown; argv = shutdown;
else if(res == RES_REBOOT) else if(response == RES_REBOOT)
argv = reboot; argv = reboot;
else else
return 1; return;
if(g_spawn_async(NULL, argv, NULL, G_SPAWN_FILE_AND_ARGV_ZERO, NULL, if(g_spawn_async(NULL, argv, NULL, G_SPAWN_FILE_AND_ARGV_ZERO, NULL,
NULL, NULL, &error) != TRUE) NULL, NULL, &error) != TRUE)
return panel_error(panel, error->message, 1); panel_error(panel, error->message, 1);
return 0;
} }