[gnome-photos] edit-palette, preview-view: Reset when entering edit mode
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos] edit-palette, preview-view: Reset when entering edit mode
- Date: Fri, 27 Nov 2015 17:55:59 +0000 (UTC)
commit 614e2cb3771fb6d234ab71b6d370c62be3a29f4a
Author: Debarshi Ray <debarshir gnome org>
Date: Fri Nov 27 18:47:50 2015 +0100
edit-palette, preview-view: Reset when entering edit mode
... so that the EditTools don't carry forward any state from the
previous item that we might have been editing.
To ensure that all the tools are destroyed, we use a weak reference to
track the current active tool. A strong reference would mislead us by
keeping the tool from previous session alive.
src/photos-edit-palette.c | 76 ++++++++++++++++++++++++++-------------------
src/photos-edit-palette.h | 2 +
src/photos-preview-view.c | 27 +++++++++++++--
3 files changed, 69 insertions(+), 36 deletions(-)
---
diff --git a/src/photos-edit-palette.c b/src/photos-edit-palette.c
index ffddb8c..45f9726 100644
--- a/src/photos-edit-palette.c
+++ b/src/photos-edit-palette.c
@@ -32,6 +32,7 @@
struct _PhotosEditPalette
{
GtkListBox parent_instance;
+ GIOExtensionPoint *extension_point;
GList *tools;
};
@@ -135,11 +136,6 @@ photos_edit_palette_dispose (GObject *object)
static void
photos_edit_palette_init (PhotosEditPalette *self)
{
- GIOExtensionPoint *extension_point;
- GList *extensions;
- GList *l;
- GtkSizeGroup *size_group;
-
gtk_widget_set_vexpand (GTK_WIDGET (self), TRUE);
gtk_list_box_set_selection_mode (GTK_LIST_BOX (self), GTK_SELECTION_NONE);
gtk_list_box_set_header_func (GTK_LIST_BOX (self),
@@ -147,35 +143,9 @@ photos_edit_palette_init (PhotosEditPalette *self)
NULL,
NULL);
- extension_point = g_io_extension_point_lookup (PHOTOS_TOOL_EXTENSION_POINT_NAME);
- extensions = g_io_extension_point_get_extensions (extension_point);
- extensions = g_list_copy (extensions);
- extensions = g_list_sort (extensions, photos_edit_palette_extensions_sort_func);
-
- size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-
- for (l = extensions; l != NULL; l = l->next)
- {
- GIOExtension *extension = (GIOExtension *) l->data;
- GType type;
- GtkWidget *row;
- PhotosTool *tool;
-
- type = g_io_extension_get_type (extension);
- tool = PHOTOS_TOOL (g_object_new (type, NULL));
- self->tools = g_list_prepend (self->tools, g_object_ref (tool));
-
- row = photos_edit_palette_row_new (tool, size_group);
- gtk_container_add (GTK_CONTAINER (self), row);
-
- g_signal_connect_swapped (tool, "hide-requested", G_CALLBACK (photos_edit_palette_hide_requested),
self);
-
- g_object_unref (tool);
- }
+ self->extension_point = g_io_extension_point_lookup (PHOTOS_TOOL_EXTENSION_POINT_NAME);
gtk_widget_show_all (GTK_WIDGET (self));
- g_object_unref (size_group);
- g_list_free (extensions);
}
@@ -219,3 +189,45 @@ photos_edit_palette_hide_details (PhotosEditPalette *self)
g_signal_emit (self, signals[TOOL_CHANGED], 0, NULL);
}
+
+
+void
+photos_edit_palette_show (PhotosEditPalette *self)
+{
+ GList *extensions;
+ GList *l;
+ GtkSizeGroup *size_group;
+
+ gtk_container_foreach (GTK_CONTAINER (self), (GtkCallback) gtk_widget_destroy, NULL);
+ g_list_free_full (self->tools, g_object_unref);
+ self->tools = NULL;
+
+ extensions = g_io_extension_point_get_extensions (self->extension_point);
+ extensions = g_list_copy (extensions);
+ extensions = g_list_sort (extensions, photos_edit_palette_extensions_sort_func);
+
+ size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+ for (l = extensions; l != NULL; l = l->next)
+ {
+ GIOExtension *extension = (GIOExtension *) l->data;
+ GType type;
+ GtkWidget *row;
+ PhotosTool *tool;
+
+ type = g_io_extension_get_type (extension);
+ tool = PHOTOS_TOOL (g_object_new (type, NULL));
+ self->tools = g_list_prepend (self->tools, g_object_ref (tool));
+
+ row = photos_edit_palette_row_new (tool, size_group);
+ gtk_container_add (GTK_CONTAINER (self), row);
+
+ g_signal_connect_swapped (tool, "hide-requested", G_CALLBACK (photos_edit_palette_hide_requested),
self);
+
+ g_object_unref (tool);
+ }
+
+ gtk_widget_show_all (GTK_WIDGET (self));
+ g_object_unref (size_group);
+ g_list_free (extensions);
+}
diff --git a/src/photos-edit-palette.h b/src/photos-edit-palette.h
index f9bffc9..5b488cd 100644
--- a/src/photos-edit-palette.h
+++ b/src/photos-edit-palette.h
@@ -44,6 +44,8 @@ GtkWidget *photos_edit_palette_new (void);
void photos_edit_palette_hide_details (PhotosEditPalette *self);
+void photos_edit_palette_show (PhotosEditPalette *self);
+
G_END_DECLS
#endif /* PHOTOS_EDIT_PALETTE_H */
diff --git a/src/photos-preview-view.c b/src/photos-preview-view.c
index 0f6bd8c..192ea43 100644
--- a/src/photos-preview-view.c
+++ b/src/photos-preview-view.c
@@ -427,9 +427,12 @@ photos_preview_view_tool_changed (PhotosPreviewView *self, PhotosTool *tool)
return;
if (priv->current_tool != NULL)
- photos_tool_deactivate (priv->current_tool);
+ {
+ photos_tool_deactivate (priv->current_tool);
+ g_object_remove_weak_pointer (G_OBJECT (priv->current_tool), (gpointer *) &priv->current_tool);
+ priv->current_tool = NULL;
+ }
- g_clear_object (&priv->current_tool);
view_container = gtk_stack_get_visible_child (GTK_STACK (priv->stack));
view = photos_preview_view_get_view_from_view_container (view_container);
@@ -437,7 +440,9 @@ photos_preview_view_tool_changed (PhotosPreviewView *self, PhotosTool *tool)
{
PhotosBaseItem *item;
- priv->current_tool = g_object_ref (tool);
+ priv->current_tool = tool;
+ g_object_add_weak_pointer (G_OBJECT (priv->current_tool), (gpointer *) &priv->current_tool);
+
item = PHOTOS_BASE_ITEM (photos_base_manager_get_active_object (priv->item_mngr));
photos_tool_activate (priv->current_tool, item, GEGL_GTK_VIEW (view));
}
@@ -479,6 +484,7 @@ photos_preview_view_window_mode_changed (PhotosPreviewView *self, PhotosWindowMo
case PHOTOS_WINDOW_MODE_EDIT:
gtk_revealer_set_reveal_child (GTK_REVEALER (priv->revealer), TRUE);
+ photos_edit_palette_show (PHOTOS_EDIT_PALETTE (priv->palette));
photos_preview_nav_buttons_hide (priv->nav_buttons);
break;
@@ -505,13 +511,25 @@ photos_preview_view_dispose (GObject *object)
g_clear_object (&priv->node);
g_clear_object (&priv->item_mngr);
g_clear_object (&priv->mode_cntrlr);
- g_clear_object (&priv->current_tool);
G_OBJECT_CLASS (photos_preview_view_parent_class)->dispose (object);
}
static void
+photos_preview_view_finalize (GObject *object)
+{
+ PhotosPreviewView *self = PHOTOS_PREVIEW_VIEW (object);
+ PhotosPreviewViewPrivate *priv = self->priv;
+
+ if (priv->current_tool != NULL)
+ g_object_remove_weak_pointer (G_OBJECT (priv->current_tool), (gpointer *) &priv->current_tool);
+
+ G_OBJECT_CLASS (photos_preview_view_parent_class)->finalize (object);
+}
+
+
+static void
photos_preview_view_constructed (GObject *object)
{
PhotosPreviewView *self = PHOTOS_PREVIEW_VIEW (object);
@@ -637,6 +655,7 @@ photos_preview_view_class_init (PhotosPreviewViewClass *class)
object_class->constructed = photos_preview_view_constructed;
object_class->dispose = photos_preview_view_dispose;
+ object_class->finalize = photos_preview_view_finalize;
object_class->set_property = photos_preview_view_set_property;
g_object_class_install_property (object_class,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]