Revision: 1566
http://geeqie.svn.sourceforge.net/geeqie/?rev=1566&view=rev
Author: nadvornik
Date: 2009-03-20 22:48:01 +0000 (Fri, 20 Mar 2009)
Log Message:
-----------
do not re-create ui_manager at layout change
Modified Paths:
--------------
trunk/src/layout.c
trunk/src/layout_util.c
trunk/src/typedefs.h
Modified: trunk/src/layout.c
===================================================================
--- trunk/src/layout.c 2009-03-20 21:28:31 UTC (rev 1565)
+++ trunk/src/layout.c 2009-03-20 22:48:01 UTC (rev 1566)
@@ -258,7 +258,7 @@
gtk_box_pack_start(GTK_BOX(box), menu_bar, FALSE, FALSE, 0);
gtk_widget_show(menu_bar);
- lw->toolbar = layout_actions_toolbar(lw);
+ layout_actions_toolbar(lw);
gtk_box_pack_start(GTK_BOX(box), lw->toolbar, FALSE, FALSE, 0);
if (!lw->options.toolbar_hidden) gtk_widget_show(lw->toolbar);
@@ -1638,7 +1638,6 @@
GtkWidget *files;
layout_actions_setup(lw);
- layout_actions_add_window(lw, lw->window);
lw->group_box = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(lw->main_box), lw->group_box, TRUE, TRUE, 0);
@@ -1770,21 +1769,17 @@
layout_geometry_get_dividers(lw, &lw->options.main_window.hdivider_pos,
&lw->options.main_window.vdivider_pos);
+ /* preserve utility_box (image + sidebars), menu_bar and toolbar to be
reused later in layout_grid_setup */
/* lw->image is preserved together with lw->utility_box */
- if (lw->utility_box)
- {
- /* preserve utility_box (image + sidebars) to be reused later
in layout_grid_setup */
- gtk_widget_hide(lw->utility_box);
- g_object_ref(lw->utility_box);
- gtk_container_remove(GTK_CONTAINER(lw->utility_box->parent),
lw->utility_box);
- }
+ if (lw->utility_box)
gtk_container_remove(GTK_CONTAINER(lw->utility_box->parent), lw->utility_box);
+ if (lw->menu_bar)
gtk_container_remove(GTK_CONTAINER(lw->menu_bar->parent), lw->menu_bar);
+ if (lw->toolbar)
gtk_container_remove(GTK_CONTAINER(lw->toolbar->parent), lw->toolbar);
/* clear it all */
lw->h_pane = NULL;
lw->v_pane = NULL;
- lw->toolbar = NULL;
lw->path_entry = NULL;
lw->dir_view = NULL;
lw->vd = NULL;
@@ -1801,10 +1796,12 @@
lw->info_pixel = NULL;
lw->info_zoom = NULL;
+/*
if (lw->ui_manager) g_object_unref(lw->ui_manager);
lw->ui_manager = NULL;
lw->action_group = NULL;
lw->action_group_editors = NULL;
+*/
gtk_container_remove(GTK_CONTAINER(lw->main_box), lw->group_box);
lw->group_box = NULL;
@@ -1817,6 +1814,9 @@
layout_util_sync(lw);
layout_status_update_all(lw);
+
+ // printf("%d %d %d \n", G_OBJECT(lw->utility_box)->ref_count,
G_OBJECT(lw->menu_bar)->ref_count, G_OBJECT(lw->toolbar)->ref_count);
+
/* sync */
if (image_get_fd(lw->image))
@@ -2208,6 +2208,10 @@
layout_bars_close(lw);
+ g_object_unref(lw->menu_bar);
+ g_object_unref(lw->toolbar);
+ g_object_unref(lw->utility_box);
+
gtk_widget_destroy(lw->window);
if (lw->split_image_sizegroup)
g_object_unref(lw->split_image_sizegroup);
Modified: trunk/src/layout_util.c
===================================================================
--- trunk/src/layout_util.c 2009-03-20 21:28:31 UTC (rev 1565)
+++ trunk/src/layout_util.c 2009-03-20 22:48:01 UTC (rev 1566)
@@ -1760,6 +1760,8 @@
layout_actions_setup_marks(lw);
layout_actions_setup_editors(lw);
layout_copy_path_update(lw);
+
+ layout_actions_add_window(lw, lw->window);
}
void layout_editors_reload_all(void)
@@ -1800,15 +1802,20 @@
GtkWidget *layout_actions_menu_bar(LayoutWindow *lw)
{
- return gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu");
+ if (lw->menu_bar) return lw->menu_bar;
+ lw->menu_bar = gtk_ui_manager_get_widget(lw->ui_manager, "/MainMenu");
+ g_object_ref(lw->menu_bar);
+ return lw->menu_bar;
}
GtkWidget *layout_actions_toolbar(LayoutWindow *lw)
{
- GtkWidget *bar = gtk_ui_manager_get_widget(lw->ui_manager, "/ToolBar");
- gtk_toolbar_set_icon_size(GTK_TOOLBAR(bar),
GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_toolbar_set_style(GTK_TOOLBAR(bar), GTK_TOOLBAR_ICONS);
- return bar;
+ if (lw->toolbar) return lw->toolbar;
+ lw->toolbar = gtk_ui_manager_get_widget(lw->ui_manager, "/ToolBar");
+ g_object_ref(lw->toolbar);
+ gtk_toolbar_set_icon_size(GTK_TOOLBAR(lw->toolbar),
GTK_ICON_SIZE_SMALL_TOOLBAR);
+ gtk_toolbar_set_style(GTK_TOOLBAR(lw->toolbar), GTK_TOOLBAR_ICONS);
+ return lw->toolbar;
}
void layout_toolbar_clear(LayoutWindow *lw)
@@ -2164,6 +2171,7 @@
GtkWidget *layout_bars_prepare(LayoutWindow *lw, GtkWidget *image)
{
+ if (lw->utility_box) return lw->utility_box;
lw->utility_box = gtk_hbox_new(FALSE, PREF_PAD_GAP);
lw->utility_paned = gtk_hpaned_new();
gtk_box_pack_start(GTK_BOX(lw->utility_box), lw->utility_paned, TRUE,
TRUE, 0);
@@ -2173,6 +2181,7 @@
gtk_widget_show(image);
+ g_object_ref(lw->utility_box);
return lw->utility_box;
}
Modified: trunk/src/typedefs.h
===================================================================
--- trunk/src/typedefs.h 2009-03-20 21:28:31 UTC (rev 1565)
+++ trunk/src/typedefs.h 2009-03-20 22:48:01 UTC (rev 1566)
@@ -578,9 +578,10 @@
// gint tools_float;
// gint tools_hidden;
+ GtkWidget *menu_bar; /* referenced by lw, exist during whole lw
lifetime */
/* toolbar */
- GtkWidget *toolbar;
+ GtkWidget *toolbar; /* referenced by lw, exist during whole lw lifetime
*/
// gint toolbar_hidden;
// GtkWidget *thumb_button;
@@ -638,7 +639,7 @@
/* misc */
- GtkWidget *utility_box;
+ GtkWidget *utility_box; /* referenced by lw, exist during whole lw
lifetime */
GtkWidget *utility_paned; /* between image and bar */
GtkWidget *bar_sort;
GtkWidget *bar;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Geeqie-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geeqie-svn