diff options
author | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2011-01-06 17:25:50 +0900 |
---|---|---|
committer | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2011-01-06 17:25:50 +0900 |
commit | fc47ae2d045736b853b010510a428a680b55e07b (patch) | |
tree | 3d8378d847ed0a672f757950ce135c84c278a064 /src | |
parent | 53c3782c8b7967daf7d29385548e58fd96b2dc39 (diff) | |
download | glade-fc47ae2d045736b853b010510a428a680b55e07b.tar.gz |
* src/glade-window.c: Added one palette per project, setting the palette's project
requires that every item update itself for the support for the project target version,
this was causing notebook page switches between projects to be very slow (actually
costing an entire second), with one palette for each project the project switch
is drastically improved.
Diffstat (limited to 'src')
-rw-r--r-- | src/glade-window.c | 115 |
1 files changed, 68 insertions, 47 deletions
diff --git a/src/glade-window.c b/src/glade-window.c index 2b26fefd..ef5614da 100644 --- a/src/glade-window.c +++ b/src/glade-window.c @@ -101,16 +101,16 @@ struct _GladeWindowPrivate GladeDesignView *active_view; gint num_tabs; - GtkWidget *inspectors_notebook; + GtkWidget *palettes_notebook; /* Cached per project palettes */ + GtkWidget *inspectors_notebook; /* Cached per project inspectors */ GladeEditor *editor; /* The editor */ - GladePalette *palette; /* The palette */ GtkWidget *statusbar; /* A pointer to the status bar. */ guint statusbar_menu_context_id; /* The context id of the menu bar */ guint statusbar_actions_context_id; /* The context id of actions messages */ - GtkUIManager *ui; /* The UIManager */ + GtkUIManager *ui; /* The UIManager */ guint projects_list_menu_ui_id; /* Merge id for projects list menu */ GtkActionGroup *static_actions; /* All the static actions */ @@ -499,8 +499,6 @@ project_selection_changed_cb (GladeProject * project, GladeWindow * window) { glade_widget = glade_widget_get_from_gobject (G_OBJECT (list->data)); - glade_widget_show (glade_widget); - clean_actions (window); if (glade_widget_get_actions (glade_widget)) add_actions (window, glade_widget, glade_widget_get_actions (glade_widget)); @@ -1675,14 +1673,16 @@ notebook_switch_page_cb (GtkNotebook * notebook, project = glade_design_view_get_project (view); - glade_palette_set_project (window->priv->palette, project); - refresh_title (window); + set_sensitivity_according_to_project (window, project); - /* switch to the project's inspector */ + /* switch to the project's inspector/palette */ gtk_notebook_set_current_page (GTK_NOTEBOOK (window->priv->inspectors_notebook), page_num); + gtk_notebook_set_current_page (GTK_NOTEBOOK + (window->priv->palettes_notebook), page_num); + /* activate the corresponding item in the project menu */ action_name = g_strdup_printf ("Tab_%d", page_num); @@ -1719,7 +1719,8 @@ notebook_tab_added_cb (GtkNotebook * notebook, guint page_num, GladeWindow * window) { GladeProject *project; - GtkWidget *inspector; + GtkWidget *inspector, *palette; + GtkAction *action; ++window->priv->num_tabs; @@ -1748,18 +1749,37 @@ notebook_tab_added_cb (GtkNotebook * notebook, inspector = glade_inspector_new (); gtk_widget_show (inspector); glade_inspector_set_project (GLADE_INSPECTOR (inspector), project); + gtk_notebook_append_page (GTK_NOTEBOOK (window->priv->inspectors_notebook), + inspector, NULL); + + /* create palette */ + palette = glade_palette_new (); + gtk_widget_show (palette); + glade_palette_set_show_selector_button (GLADE_PALETTE (palette), FALSE); + glade_palette_set_project (GLADE_PALETTE (palette), project); + + action = gtk_action_group_get_action (window->priv->static_actions, "UseSmallIcons"); + glade_palette_set_use_small_item_icons (GLADE_PALETTE (palette), + gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))); + + action = gtk_action_group_get_action (window->priv->static_actions, "IconsAndLabels"); + glade_palette_set_item_appearance (GLADE_PALETTE (palette), + gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action))); + + gtk_notebook_append_page (GTK_NOTEBOOK (window->priv->palettes_notebook), + palette, NULL); if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (view), "view-added-while-loading"))) { gtk_widget_set_sensitive (inspector, FALSE); + gtk_widget_set_sensitive (palette, FALSE); g_signal_connect (project, "parse-finished", G_CALLBACK (set_widget_sensitive_on_load), inspector); + g_signal_connect (project, "parse-finished", + G_CALLBACK (set_widget_sensitive_on_load), palette); } - gtk_notebook_append_page (GTK_NOTEBOOK (window->priv->inspectors_notebook), - inspector, NULL); - set_sensitivity_according_to_project (window, project); refresh_projects_list_menu (window); @@ -1784,10 +1804,6 @@ notebook_tab_removed_cb (GtkNotebook *notebook, if (window->priv->num_tabs == 0) { gtk_widget_set_sensitive (GTK_WIDGET (window->priv->editor), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (window->priv->palette), FALSE); - - glade_palette_set_project (window->priv->palette, NULL); - window->priv->active_view = NULL; } @@ -1809,8 +1825,8 @@ notebook_tab_removed_cb (GtkNotebook *notebook, G_CALLBACK (on_pointer_mode_changed), window); - gtk_notebook_remove_page (GTK_NOTEBOOK (window->priv->inspectors_notebook), - page_num); + gtk_notebook_remove_page (GTK_NOTEBOOK (window->priv->inspectors_notebook), page_num); + gtk_notebook_remove_page (GTK_NOTEBOOK (window->priv->palettes_notebook), page_num); clean_actions (window); @@ -1860,23 +1876,38 @@ recent_chooser_item_activated_cb (GtkRecentChooser * chooser, } static void -palette_appearance_change_cb (GtkRadioAction * action, - GtkRadioAction * current, GladeWindow * window) +palette_appearance_change_cb (GtkRadioAction *action, + GtkRadioAction *current, + GladeWindow *window) { + GList *children, *l; gint value; value = gtk_radio_action_get_current_value (action); - glade_palette_set_item_appearance (window->priv->palette, value); - + children = gtk_container_get_children (GTK_CONTAINER (window->priv->palettes_notebook)); + for (l = children; l; l = l->next) + { + if (GLADE_IS_PALETTE (l->data)) + glade_palette_set_item_appearance (GLADE_PALETTE (l->data), value); + } + g_list_free (children); } static void palette_toggle_small_icons_cb (GtkAction * action, GladeWindow * window) { - glade_palette_set_use_small_item_icons (window->priv->palette, - gtk_toggle_action_get_active - (GTK_TOGGLE_ACTION (action))); + GList *children, *l; + + children = gtk_container_get_children (GTK_CONTAINER (window->priv->palettes_notebook)); + for (l = children; l; l = l->next) + { + if (GLADE_IS_PALETTE (l->data)) + glade_palette_set_use_small_item_icons (GLADE_PALETTE (l->data), + gtk_toggle_action_get_active + (GTK_TOGGLE_ACTION (action))); + } + g_list_free (children); } static gboolean @@ -3231,19 +3262,13 @@ glade_window_config_load (GladeWindow * window) gtk_notebook_set_show_tabs (GTK_NOTEBOOK (window->priv->notebook), show_tabs); - action = - gtk_action_group_get_action (window->priv->static_actions, - "ToolbarVisible"); + action = gtk_action_group_get_action (window->priv->static_actions, "ToolbarVisible"); gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), show_toolbar); - action = - gtk_action_group_get_action (window->priv->static_actions, - "ProjectTabsVisible"); + action = gtk_action_group_get_action (window->priv->static_actions, "ProjectTabsVisible"); gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), show_tabs); - action = - gtk_action_group_get_action (window->priv->static_actions, - "StatusbarVisible"); + action = gtk_action_group_get_action (window->priv->static_actions, "StatusbarVisible"); gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), show_tabs); /* Paned positions */ @@ -3311,7 +3336,6 @@ glade_window_init (GladeWindow * window) GtkWidget *hpaned2; GtkWidget *vpaned; GtkWidget *menubar; - GtkWidget *palette; GtkWidget *dockitem; GtkWidget *widget; GtkWidget *sep; @@ -3328,12 +3352,9 @@ glade_window_init (GladeWindow * window) /* editor */ priv->editor = GLADE_EDITOR (glade_editor_new ()); + gtk_widget_show (GTK_WIDGET (priv->editor)); g_object_ref_sink (G_OBJECT (priv->editor)); - /* palette */ - priv->palette = GLADE_PALETTE (glade_palette_new ()); - g_object_ref_sink (G_OBJECT (priv->palette)); - /* menubar */ menubar = construct_menu (window); gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, TRUE, 0); @@ -3403,19 +3424,19 @@ glade_window_init (GladeWindow * window) gtk_paned_pack2 (GTK_PANED (hpaned2), priv->notebook, TRUE, FALSE); gtk_widget_show (priv->notebook); - /* palette */ - palette = GTK_WIDGET (priv->palette); - glade_palette_set_show_selector_button (GLADE_PALETTE (palette), FALSE); - gtk_paned_pack1 (GTK_PANED (hpaned2), palette, FALSE, FALSE); - setup_dock (&priv->docks[DOCK_PALETTE], palette, 200, 540, + /* palettes */ + priv->palettes_notebook = gtk_notebook_new (); + gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->palettes_notebook), FALSE); + gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->palettes_notebook), FALSE); + gtk_paned_pack1 (GTK_PANED (hpaned2), priv->palettes_notebook, FALSE, FALSE); + setup_dock (&priv->docks[DOCK_PALETTE], priv->palettes_notebook, 200, 540, _("Palette"), "palette", hpaned2, TRUE); - gtk_widget_show (palette); + gtk_widget_show (priv->palettes_notebook); /* inspectors */ priv->inspectors_notebook = gtk_notebook_new (); gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->inspectors_notebook), FALSE); - gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->inspectors_notebook), - FALSE); + gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->inspectors_notebook), FALSE); gtk_widget_show (priv->inspectors_notebook); gtk_paned_pack1 (GTK_PANED (vpaned), priv->inspectors_notebook, FALSE, FALSE); setup_dock (&priv->docks[DOCK_INSPECTOR], priv->inspectors_notebook, 300, 540, |