Bugzilla – Attachment 250505 Details for
Bug 402256
main-menu process high cpu usage
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Forgot Password
[patch]
gnome-main-menu-bnc402256-leaks.diff
gnome-main-menu-bnc402256-leaks.diff (text/plain), 6.61 KB, created by
Federico Mena Quintero
on 2008-11-06 23:11:32 UTC
(
hide
)
Description:
gnome-main-menu-bnc402256-leaks.diff
Filename:
MIME Type:
Creator:
Federico Mena Quintero
Created:
2008-11-06 23:11:32 UTC
Size:
6.61 KB
patch
obsolete
>bnc402256 - Fix memory leaks when refreshing the recent files list and bookmarks. > >diff --git a/libslab/bookmark-agent.c b/libslab/bookmark-agent.c >index 47dc6bc..93efd23 100644 >--- a/libslab/bookmark-agent.c >+++ b/libslab/bookmark-agent.c >@@ -1061,8 +1061,12 @@ create_app_item (BookmarkAgent *this, const gchar *uri) > else if (! libslab_strcmp (name, "Shutdown")) > g_bookmark_file_set_title (priv->store, uri, _("Shutdown")); > >+ g_free (name); >+ > if (libslab_strcmp (uri, uri_new)) > g_bookmark_file_move_item (priv->store, uri, uri_new, NULL); >+ >+ g_free (uri_new); > } > > static void >@@ -1121,6 +1125,8 @@ create_doc_item (BookmarkAgent *this, const gchar *uri) > > if (libslab_strcmp (uri, uri_new)) > g_bookmark_file_move_item (priv->store, uri, uri_new, NULL); >+ >+ g_free (uri_new); > } > > static void >@@ -1204,6 +1210,8 @@ create_dir_item (BookmarkAgent *this, const gchar *uri) > > if (uri_new && libslab_strcmp (uri, uri_new)) > g_bookmark_file_move_item (priv->store, uri, uri_new, NULL); >+ >+ g_free (uri_new); > } > > static void >diff --git a/libslab/nameplate-tile.c b/libslab/nameplate-tile.c >index 23362e4..fc2f661 100644 >--- a/libslab/nameplate-tile.c >+++ b/libslab/nameplate-tile.c >@@ -36,7 +36,6 @@ typedef struct > GtkContainer *image_ctnr; > GtkContainer *header_ctnr; > GtkContainer *subheader_ctnr; >- GtkTooltips *tooltips; > } NameplateTilePrivate; > > #define NAMEPLATE_TILE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NAMEPLATE_TILE_TYPE, NameplateTilePrivate)) >@@ -100,7 +99,6 @@ nameplate_tile_class_init (NameplateTileClass * this_class) > static void > nameplate_tile_init (NameplateTile * this) > { >- NAMEPLATE_TILE_GET_PRIVATE (this)->tooltips = NULL; > } > > static GObject * >@@ -117,6 +115,12 @@ nameplate_tile_constructor (GType type, guint n_param, GObjectConstructParam * p > static void > nameplate_tile_finalize (GObject * g_object) > { >+ NameplateTile *np_tile; >+ NameplateTilePrivate *priv; >+ >+ np_tile = NAMEPLATE_TILE (g_object); >+ priv = NAMEPLATE_TILE_GET_PRIVATE (np_tile); >+ > (*G_OBJECT_CLASS (nameplate_tile_parent_class)->finalize) (g_object); > } > >@@ -124,7 +128,7 @@ static void > nameplate_tile_get_property (GObject * g_object, guint prop_id, GValue * value, > GParamSpec * param_spec) > { >- GtkTooltipsData *tooltip; >+ char *tooltip; > NameplateTile *np_tile = NAMEPLATE_TILE (g_object); > > switch (prop_id) >@@ -141,8 +145,9 @@ nameplate_tile_get_property (GObject * g_object, guint prop_id, GValue * value, > g_value_set_object (value, np_tile->subheader); > break; > case PROP_NAMEPLATE_TOOLTIP: >- tooltip = gtk_tooltips_data_get (GTK_WIDGET (np_tile)); >- g_value_set_string (value, tooltip ? tooltip->tip_text : NULL); >+ tooltip = gtk_widget_get_tooltip_text (GTK_WIDGET (np_tile)); >+ g_value_set_string (value, tooltip); >+ g_free (tooltip); > break; > > default: >@@ -229,17 +234,7 @@ nameplate_tile_set_property (GObject * g_object, guint prop_id, const GValue * v > break; > > case PROP_NAMEPLATE_TOOLTIP: >- if (tooltip) { >- if (! priv->tooltips) >- priv->tooltips = gtk_tooltips_new (); >- >- gtk_tooltips_set_tip (priv->tooltips, GTK_WIDGET(this), tooltip, tooltip); >- gtk_tooltips_enable(priv->tooltips); >- } >- else >- if (priv->tooltips) >- gtk_tooltips_disable(priv->tooltips); >- >+ gtk_widget_set_tooltip_text (GTK_WIDGET (this), tooltip); > break; > > >diff --git a/libslab/tile.c b/libslab/tile.c >index 0505c36..870944d 100644 >--- a/libslab/tile.c >+++ b/libslab/tile.c >@@ -209,7 +209,7 @@ tile_finalize (GObject * g_object) > if (tile->uri) > g_free (tile->uri); > if (tile->context_menu) >- gtk_object_sink (GTK_OBJECT (tile->context_menu)); >+ gtk_widget_destroy (GTK_WIDGET (tile->context_menu)); > > g_object_unref (priv->double_click_detector); > >@@ -240,17 +240,34 @@ tile_get_property (GObject * g_obj, guint prop_id, GValue * value, GParamSpec * > static void > tile_set_property (GObject * g_obj, guint prop_id, const GValue * value, GParamSpec * param_spec) > { >+ Tile *tile; >+ GtkMenu *menu; >+ > if (!IS_TILE (g_obj)) > return; > >+ tile = TILE (g_obj); >+ > switch (prop_id) > { > case PROP_TILE_URI: >- TILE (g_obj)->uri = g_strdup (g_value_get_string (value)); >+ tile->uri = g_strdup (g_value_get_string (value)); > break; > > case PROP_TILE_CONTEXT_MENU: >- TILE (g_obj)->context_menu = g_value_get_object (value); >+ menu = g_value_get_object (value); >+ >+ if (menu == tile->context_menu) >+ break; >+ >+ if (tile->context_menu) >+ gtk_menu_detach (tile->context_menu); >+ >+ tile->context_menu = menu; >+ >+ if (tile->context_menu) >+ gtk_menu_attach_to_widget (tile->context_menu, GTK_WIDGET (tile), NULL); >+ > break; > > default: >diff --git a/main-menu/src/main-menu-ui.c b/main-menu/src/main-menu-ui.c >index d212eef..0b0248c 100644 >--- a/main-menu/src/main-menu-ui.c >+++ b/main-menu/src/main-menu-ui.c >@@ -1001,6 +1001,7 @@ setup_recently_used_store_monitor (MainMenuUI *this, gboolean is_startup) > > path = get_recently_used_store_filename (); > file = g_file_new_for_path (path); >+ g_free (path); > > monitor = g_file_monitor_file (file, 0, NULL, NULL); > if (monitor) { >@@ -1011,6 +1012,8 @@ setup_recently_used_store_monitor (MainMenuUI *this, gboolean is_startup) > this); > } > >+ g_object_unref (file); >+ > priv->recently_used_store_monitor = monitor; > > if (priv->recently_used_timeout_id != 0) >diff --git a/main-menu/src/tile-table.c b/main-menu/src/tile-table.c >index 5b368e6..cbb6bdd 100644 >--- a/main-menu/src/tile-table.c >+++ b/main-menu/src/tile-table.c >@@ -30,6 +30,7 @@ typedef struct { > BookmarkAgent *agent; > > GList *tiles; >+ GtkSizeGroup *icon_size_group; > > GtkBin **bins; > gint n_bins; >@@ -119,8 +120,6 @@ tile_table_reload (TileTable *this) > GtkWidget *tile; > gint n_tiles; > >- GtkSizeGroup *icon_size_group; >- > GList *node; > gint i; > >@@ -144,7 +143,8 @@ tile_table_reload (TileTable *this) > > priv->tiles = NULL; > >- icon_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); >+ if (!priv->icon_size_group) >+ priv->icon_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); > > for (node = tiles; node; node = node->next) { > tile = GTK_WIDGET (node->data); >@@ -161,7 +161,7 @@ tile_table_reload (TileTable *this) > priv->tiles = g_list_append (priv->tiles, tile); > > if (IS_NAMEPLATE_TILE (tile)) >- gtk_size_group_add_widget (icon_size_group, NAMEPLATE_TILE (tile)->image); >+ gtk_size_group_add_widget (priv->icon_size_group, NAMEPLATE_TILE (tile)->image); > } > > g_list_free (tiles); >@@ -343,6 +343,9 @@ finalize (GObject *g_obj) > { > TileTablePrivate *priv = PRIVATE (g_obj); > >+ if (priv->icon_size_group) >+ g_object_unref (priv->icon_size_group); >+ > g_free (priv->bins); > > G_OBJECT_CLASS (tile_table_parent_class)->finalize (g_obj);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
Actions:
View
|
Diff
Attachments on
bug 402256
:
226200
|
226231
|
230317
|
232385
|
247701
|
248215
|
248228
| 250505