Clean up action groups on quit.
This commit is contained in:
@ -151,7 +151,7 @@ static void on_options_menu (GtkAction *action,
|
||||
GtkWidget *window);
|
||||
static void on_about (GtkAction *action,
|
||||
GtkWidget *window);
|
||||
static void on_quit (GtkAction * action,
|
||||
static void on_quit_from_menu (GtkAction * action,
|
||||
GtkWidget *window);
|
||||
static void eekboard_free (Eekboard *eekboard);
|
||||
static GtkWidget *create_widget (Eekboard *eekboard,
|
||||
@ -205,7 +205,7 @@ static const GtkActionEntry action_entry[] = {
|
||||
{"FileMenu", NULL, N_("_File")},
|
||||
{"KeyboardMenu", NULL, N_("_Keyboard")},
|
||||
{"HelpMenu", NULL, N_("_Help")},
|
||||
{"Quit", GTK_STOCK_QUIT, NULL, NULL, NULL, G_CALLBACK (on_quit)},
|
||||
{"Quit", GTK_STOCK_QUIT, NULL, NULL, NULL, G_CALLBACK (on_quit_from_menu)},
|
||||
{"Country", NULL, N_("Country"), NULL, NULL,
|
||||
G_CALLBACK(on_countries_menu)},
|
||||
{"Language", NULL, N_("Language"), NULL, NULL,
|
||||
@ -280,12 +280,24 @@ on_about (GtkAction * action, GtkWidget *window)
|
||||
}
|
||||
|
||||
static void
|
||||
on_quit (GtkAction * action, GtkWidget *window)
|
||||
on_destroy (gpointer user_data)
|
||||
{
|
||||
Eekboard *eekboard = g_object_get_data (G_OBJECT(window), "eekboard");
|
||||
gtk_main_quit ();
|
||||
}
|
||||
|
||||
fakekey_release (eekboard->fakekey);
|
||||
static gboolean
|
||||
on_quit (gpointer user_data)
|
||||
{
|
||||
Eekboard *eekboard = user_data;
|
||||
/* release the currently hold key */
|
||||
if (eekboard->fakekey)
|
||||
fakekey_release (eekboard->fakekey);
|
||||
eekboard_free (eekboard);
|
||||
}
|
||||
|
||||
static void
|
||||
on_quit_from_menu (GtkAction * action, GtkWidget *window)
|
||||
{
|
||||
gtk_main_quit ();
|
||||
}
|
||||
|
||||
@ -973,6 +985,7 @@ create_menus (Eekboard *eekboard,
|
||||
|
||||
gtk_ui_manager_insert_action_group (eekboard->ui_manager, action_group, 0);
|
||||
gtk_ui_manager_add_ui_from_string (eekboard->ui_manager, ui_description, -1, NULL);
|
||||
g_object_unref (action_group);
|
||||
|
||||
eekboard->countries_action_group = gtk_action_group_new ("Countries");
|
||||
gtk_ui_manager_insert_action_group (eekboard->ui_manager,
|
||||
@ -1204,6 +1217,20 @@ eekboard_free (Eekboard *eekboard)
|
||||
g_object_unref (eekboard->registry);
|
||||
if (eekboard->engine)
|
||||
g_object_unref (eekboard->engine);
|
||||
if (eekboard->gconfc)
|
||||
g_object_unref (eekboard->gconfc);
|
||||
if (eekboard->ui_manager)
|
||||
g_object_unref (eekboard->ui_manager);
|
||||
if (eekboard->countries_action_group)
|
||||
g_object_unref (eekboard->countries_action_group);
|
||||
if (eekboard->languages_action_group)
|
||||
g_object_unref (eekboard->languages_action_group);
|
||||
if (eekboard->models_action_group)
|
||||
g_object_unref (eekboard->models_action_group);
|
||||
if (eekboard->layouts_action_group)
|
||||
g_object_unref (eekboard->layouts_action_group);
|
||||
if (eekboard->options_action_group)
|
||||
g_object_unref (eekboard->options_action_group);
|
||||
g_slice_free (Eekboard, eekboard);
|
||||
}
|
||||
|
||||
@ -1556,7 +1583,7 @@ main (int argc, char *argv[])
|
||||
g_object_set (G_OBJECT(window), "accept_focus", FALSE, NULL);
|
||||
gtk_window_set_title (GTK_WINDOW(window), "Keyboard");
|
||||
g_signal_connect (G_OBJECT (window), "destroy",
|
||||
G_CALLBACK (gtk_main_quit), NULL);
|
||||
G_CALLBACK (on_destroy), eekboard);
|
||||
|
||||
vbox = gtk_vbox_new (FALSE, 0);
|
||||
|
||||
@ -1664,6 +1691,7 @@ main (int argc, char *argv[])
|
||||
if (combo)
|
||||
gtk_combo_box_set_active (GTK_COMBO_BOX(combo), 0);
|
||||
|
||||
gtk_quit_add (0, on_quit, eekboard);
|
||||
gtk_main ();
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user