Merge lp:~3v1n0/bamf/view-incremental-children into lp:bamf

Proposed by Marco Trevisan (Treviño)
Status: Merged
Approved by: Andrea Azzarone
Approved revision: 570
Merged at revision: 548
Proposed branch: lp:~3v1n0/bamf/view-incremental-children
Merge into: lp:bamf
Diff against target: 98 lines (+30/-8)
1 file modified
lib/libbamf/bamf-view.c (+30/-8)
To merge this branch: bzr merge lp:~3v1n0/bamf/view-incremental-children
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Approve
Andrea Azzarone (community) Approve
Review via email: mp+169226@code.launchpad.net

Commit message

BamfView: use incremental children caching, delete them only when daemon stops

Each view used to cleanup the cached children every time a new one was added or
removed. This was needed at the dbus-glib times to handle the case of bamfdaemon
restart, but now we can handle this nicely, clening the children up only when this
happens.

Description of the change

Don't do unneded dbus-calls when the signals are already informing us about view's children changes.

To post a comment you must log in.
Revision history for this message
Andrea Azzarone (azzar1) :
review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/libbamf/bamf-view.c'
--- lib/libbamf/bamf-view.c 2013-06-13 12:52:04 +0000
+++ lib/libbamf/bamf-view.c 2013-06-13 15:01:31 +0000
@@ -87,7 +87,8 @@
87 gchar *local_name;87 gchar *local_name;
88 gboolean is_closed;88 gboolean is_closed;
89 gboolean sticky;89 gboolean sticky;
90 GList *cached_children;};90 GList *cached_children;
91};
9192
92static void bamf_view_unset_proxy (BamfView *self);93static void bamf_view_unset_proxy (BamfView *self);
9394
@@ -108,6 +109,7 @@
108 GList *results = NULL;109 GList *results = NULL;
109 GError *error = NULL;110 GError *error = NULL;
110 BamfViewPrivate *priv;111 BamfViewPrivate *priv;
112 BamfView *child;
111113
112 g_return_val_if_fail (BAMF_IS_VIEW (view), NULL);114 g_return_val_if_fail (BAMF_IS_VIEW (view), NULL);
113115
@@ -136,8 +138,12 @@
136138
137 for (i = len-1; i >= 0; --i)139 for (i = len-1; i >= 0; --i)
138 {140 {
139 view = _bamf_factory_view_for_path (_bamf_factory_get_default (), children[i]);141 child = _bamf_factory_view_for_path (_bamf_factory_get_default (), children[i]);
140 results = g_list_prepend (results, g_object_ref (view));142
143 if (BAMF_IS_VIEW (child))
144 {
145 results = g_list_prepend (results, g_object_ref (child));
146 }
141 }147 }
142148
143 priv->cached_children = results;149 priv->cached_children = results;
@@ -470,16 +476,18 @@
470 view = _bamf_factory_view_for_path (_bamf_factory_get_default (), path);476 view = _bamf_factory_view_for_path (_bamf_factory_get_default (), path);
471 priv = self->priv;477 priv = self->priv;
472478
479 g_return_if_fail (BAMF_IS_VIEW (view));
480
473 if (BAMF_IS_TAB (view))481 if (BAMF_IS_TAB (view))
474 {482 {
475 g_signal_connect (view, "notify::xid",483 g_signal_connect (view, "notify::xid",
476 G_CALLBACK (bamf_view_child_xid_changed), self);484 G_CALLBACK (bamf_view_child_xid_changed), self);
477 }485 }
478486
479 if (priv->cached_children)487 if (!g_list_find (priv->cached_children, view))
480 {488 {
481 g_list_free_full (priv->cached_children, g_object_unref);489 g_object_ref (view);
482 priv->cached_children = NULL;490 priv->cached_children = g_list_prepend (priv->cached_children, view);
483 }491 }
484492
485 g_signal_emit (G_OBJECT (self), view_signals[CHILD_ADDED], 0, view);493 g_signal_emit (G_OBJECT (self), view_signals[CHILD_ADDED], 0, view);
@@ -490,16 +498,24 @@
490{498{
491 BamfView *view;499 BamfView *view;
492 BamfViewPrivate *priv;500 BamfViewPrivate *priv;
501
493 view = _bamf_factory_view_for_path (_bamf_factory_get_default (), path);502 view = _bamf_factory_view_for_path (_bamf_factory_get_default (), path);
494 priv = self->priv;503 priv = self->priv;
495504
505 g_return_if_fail (BAMF_IS_VIEW (view));
506
496 if (BAMF_IS_TAB (view))507 if (BAMF_IS_TAB (view))
497 g_signal_handlers_disconnect_by_func (view, bamf_view_on_child_added, self);508 g_signal_handlers_disconnect_by_func (view, bamf_view_on_child_added, self);
498509
499 if (priv->cached_children)510 if (priv->cached_children)
500 {511 {
501 g_list_free_full (priv->cached_children, g_object_unref);512 GList *l = g_list_find (priv->cached_children, view);
502 priv->cached_children = NULL;513
514 if (l)
515 {
516 priv->cached_children = g_list_delete_link (priv->cached_children, l);
517 g_object_unref (view);
518 }
503 }519 }
504520
505 g_signal_emit (G_OBJECT (self), view_signals[CHILD_REMOVED], 0, view);521 g_signal_emit (G_OBJECT (self), view_signals[CHILD_REMOVED], 0, view);
@@ -513,6 +529,12 @@
513529
514 if (!name_owner)530 if (!name_owner)
515 {531 {
532 if (self->priv->cached_children)
533 {
534 g_list_free_full (self->priv->cached_children, g_object_unref);
535 self->priv->cached_children = NULL;
536 }
537
516 _bamf_view_set_closed (self, TRUE);538 _bamf_view_set_closed (self, TRUE);
517 g_signal_emit (G_OBJECT (self), view_signals[CLOSED], 0);539 g_signal_emit (G_OBJECT (self), view_signals[CLOSED], 0);
518 }540 }

Subscribers

People subscribed via source and target branches