diff options
Diffstat (limited to 'mixgtk/mixgtk_wm.c')
-rw-r--r-- | mixgtk/mixgtk_wm.c | 81 |
1 files changed, 40 insertions, 41 deletions
diff --git a/mixgtk/mixgtk_wm.c b/mixgtk/mixgtk_wm.c index 93f64ca..b442eb9 100644 --- a/mixgtk/mixgtk_wm.c +++ b/mixgtk/mixgtk_wm.c @@ -1,7 +1,7 @@ /* -*-c-*- -------------- mixgtk_wm.c : * Implementation of the functions declared in mixgtk_wm.h * ------------------------------------------------------------------ - * Copyright (C) 2001, 2002, 2004, 2006, 2007, 2008 Free Software Foundation, Inc. + * Copyright (C) 2001, 2002, 2004, 2006, 2007, 2008, 2019, 2020 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -40,6 +40,8 @@ typedef struct window_info_t_ GtkCheckMenuItem *menu; const gchar *menu_name; const gchar *config_key; + const gchar *toolbar_name; + const gchar *attach_button; gboolean detached; void (*detach) (void); void (*attach) (void); @@ -82,17 +84,21 @@ static void mixal_attach_ (void); static void mixal_detach_ (void); static void dev_attach_ (void); static void dev_detach_ (void); +static void reparent_ (GtkWidget *widget, GtkWidget *parent); static void update_attach_buttons_ (void); static void on_tb_style_ (GtkMenuItem *w, gpointer style); static void on_nb_switch_ (GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data); static window_info_t_ infos_[] = { - {MIXGTK_MIXVM_DIALOG, NULL, NULL, "detach_vm", "MIX.detach", + {MIXGTK_MIXVM_DIALOG, NULL, NULL, + "detach_vm", "MIX.detach", "mixvm_toolbar", "attach_button_mixvm", FALSE, mixvm_detach_, mixvm_attach_}, - {MIXGTK_MIXAL_DIALOG, NULL, NULL, "detach_source", "MIXAL.detach", + {MIXGTK_MIXAL_DIALOG, NULL, NULL, + "detach_source", "MIXAL.detach", "mixal_toolbar", "attach_button_mixal", FALSE, mixal_detach_, mixal_attach_}, - {MIXGTK_DEVICES_DIALOG, NULL, NULL, "detach_dev", "Devices.detach", + {MIXGTK_DEVICES_DIALOG, NULL, NULL, + "detach_dev", "Devices.detach", "dev_toolbar", "attach_button_dev", FALSE, dev_detach_, dev_attach_} }; @@ -197,10 +203,10 @@ on_attach_toggled (GtkCheckMenuItem *item) for (k = 0; k < INF_NO_; ++k) if (item == infos_[k].menu) break; g_return_if_fail (k < INF_NO_); - if (item->active) mixgtk_wm_detach_window (k); + gboolean active = gtk_check_menu_item_get_active (item); + if (active) mixgtk_wm_detach_window (k); else mixgtk_wm_attach_window (k); - mixgtk_config_update (infos_[k].config_key, - (item->active)? DETACH_YES_ : DETACH_NO_); + mixgtk_config_update (infos_[k].config_key, active? DETACH_YES_ : DETACH_NO_); } void @@ -216,8 +222,8 @@ on_window_hide (GtkWidget *w) void on_show_toolbars_toggled (GtkCheckMenuItem *item) { - if (item->active != mixgtk_config_show_toolbars ()) - show_toolbars_ (item->active); + gboolean active = gtk_check_menu_item_get_active (item); + if (active != mixgtk_config_show_toolbars ()) show_toolbars_ (active); } void @@ -252,8 +258,7 @@ init_info_ (void) infos_[k].menu = GTK_CHECK_MENU_ITEM - (mixgtk_widget_factory_get_child_by_name (MIXGTK_MAIN, - infos_[k].menu_name)); + (mixgtk_widget_factory_get_by_name (infos_[k].menu_name)); g_assert (infos_[k].menu != NULL); txt = mixgtk_config_get (infos_[k].config_key); infos_[k].detached = txt && !g_ascii_strcasecmp (txt, DETACH_YES_); @@ -309,8 +314,7 @@ init_signals_ (void) G_OBJECT (mixgtk_widget_factory_get_dialog (infos_[k].dialog)); GObject *button = - G_OBJECT (mixgtk_widget_factory_get (infos_[k].dialog, - MIXGTK_WIDGET_ATTACH_BUTTON)); + G_OBJECT (mixgtk_widget_factory_get_by_name (infos_[k].attach_button)); g_assert (dialog != NULL); g_assert (button != NULL); @@ -426,7 +430,7 @@ init_dev_ (void) GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (page), devs); + gtk_container_add (GTK_CONTAINER (page), devs); infos_[MIXGTK_DEVICES_WINDOW].widget = page; @@ -450,8 +454,7 @@ init_tb_ (void) gint style = mixgtk_config_tb_style (); tb_menu_ = GTK_CHECK_MENU_ITEM - (mixgtk_widget_factory_get_child_by_name (MIXGTK_MAIN, - TB_MENU_NAME_)); + (mixgtk_widget_factory_get_by_name (TB_MENU_NAME_)); g_assert (tb_menu_ != NULL); gtk_check_menu_item_set_active (tb_menu_, mixgtk_config_show_toolbars ()); @@ -475,8 +478,7 @@ init_tb_ (void) for (k = 0; k < 4; ++k) { - GtkWidget *item = - mixgtk_widget_factory_get_child_by_name (MIXGTK_MAIN, names[k]); + GtkWidget *item = mixgtk_widget_factory_get_by_name (names[k]); g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (on_tb_style_), GUINT_TO_POINTER (k)); @@ -493,22 +495,21 @@ on_tb_style_ (GtkMenuItem *w, gpointer style) mixgtk_config_set_tb_style (ui_style); } +static const gchar *TB_NAME = "main_toolbar"; + static void set_tb_style_ (guint style) { - static const gchar *TB_NAME = "main_toolbar"; - static const gchar *TB_DNAME = "dlg_toolbar"; - gint k; - GtkToolbar *tb = GTK_TOOLBAR - (mixgtk_widget_factory_get_child_by_name (MIXGTK_MAIN, TB_NAME)); + GtkToolbar *tb = + GTK_TOOLBAR (mixgtk_widget_factory_get_by_name (TB_NAME)); gtk_toolbar_set_style (tb, style); for (k = 0; k < INF_NO_; ++k) { GtkToolbar *tb = GTK_TOOLBAR - (mixgtk_widget_factory_get_child_by_name (infos_[k].dialog, TB_DNAME)); + (mixgtk_widget_factory_get_by_name (infos_[k].toolbar_name)); gtk_toolbar_set_style (tb, style); } } @@ -516,12 +517,9 @@ set_tb_style_ (guint style) static void show_toolbars_ (gboolean show) { - static const gchar *HANDLE_NAME = "tb_handle"; - gint k; - GtkWidget *handle = - mixgtk_widget_factory_get_child_by_name (MIXGTK_MAIN, HANDLE_NAME); + GtkWidget *handle = mixgtk_widget_factory_get_by_name (TB_NAME); if (show) gtk_widget_show (handle); @@ -531,7 +529,7 @@ show_toolbars_ (gboolean show) for (k = 0; k < INF_NO_; ++k) { GtkWidget *hd = - mixgtk_widget_factory_get_child_by_name (infos_[k].dialog, HANDLE_NAME); + mixgtk_widget_factory_get_by_name (infos_[k].toolbar_name); if (show) gtk_widget_show (hd); else gtk_widget_hide (hd); } @@ -544,7 +542,7 @@ init_autosave_ (void) #define AUTOSAVE_ITEM_ "save_on_exit" GtkCheckMenuItem *item = GTK_CHECK_MENU_ITEM - (mixgtk_widget_factory_get_child_by_name (MIXGTK_MAIN, AUTOSAVE_ITEM_)); + (mixgtk_widget_factory_get_by_name (AUTOSAVE_ITEM_)); if (item) { gtk_check_menu_item_set_active (item, mixgtk_config_is_autosave ()); @@ -559,8 +557,7 @@ init_about_ (void) GtkWidget *label; about_ = mixgtk_widget_factory_get_dialog (MIXGTK_ABOUT_DIALOG); g_assert (about_ != NULL); - label = mixgtk_widget_factory_get_child_by_name (MIXGTK_ABOUT_DIALOG, - VERSION_LABEL_); + label = mixgtk_widget_factory_get_by_name (VERSION_LABEL_); g_assert (label != NULL); gtk_label_set_text (GTK_LABEL (label), VERSION); gtk_widget_show (label); @@ -574,10 +571,16 @@ mixvm_attach_ (void) } static void +reparent_ (GtkWidget *widget, GtkWidget *parent) +{ + gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (widget)), widget); + gtk_container_add (GTK_CONTAINER (parent), widget); +} + +static void mixvm_detach_ (void) { - gtk_widget_reparent (infos_[MIXGTK_MIXVM_WINDOW].widget, - GTK_WIDGET (mixvm_container_)); + reparent_ (infos_[MIXGTK_MIXVM_WINDOW].widget, GTK_WIDGET (mixvm_container_)); } static void @@ -616,8 +619,7 @@ mixal_detach_ (void) } mixgtk_mixal_reparent (stat); - gtk_widget_reparent (infos_[MIXGTK_MIXAL_WINDOW].widget, - GTK_WIDGET (mixal_container_)); + reparent_ (infos_[MIXGTK_MIXAL_WINDOW].widget, GTK_WIDGET (mixal_container_)); } static void @@ -630,10 +632,10 @@ dev_attach_ (void) static void dev_detach_ (void) { - gtk_widget_reparent (infos_[MIXGTK_DEVICES_WINDOW].widget, - GTK_WIDGET (dev_container_)); + reparent_ (infos_[MIXGTK_DEVICES_WINDOW].widget, GTK_WIDGET (dev_container_)); } + static void on_nb_switch_ (GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data) @@ -664,6 +666,3 @@ update_attach_buttons_ (void) gtk_tool_item_set_visible_horizontal (detach_button_, wants_detach); gtk_tool_item_set_visible_vertical (detach_button_, wants_detach); } - - - |