[gimp] Bug 446171 – select content by click on layer icon
- From: Michael Natterer <mitch src gnome org>
- To: svn-commits-list gnome org
- Subject: [gimp] Bug 446171 – select content by click on layer icon
- Date: Sat, 18 Jul 2009 15:02:49 +0000 (UTC)
commit 0d81ce97177c10c8aee1f6b1d4addb1f5429eb2a
Author: Michael Natterer <mitch gimp org>
Date: Sat Jul 18 16:59:43 2009 +0200
Bug 446171 â?? select content by click on layer icon
* app/widgets/gimplayertreeview.c (gimp_layer_tree_view_layer_clicked):
when ALT is pressed, select the layer's alpha. SHIFT and CONTROL work
as usual to add, subtract and intersect.
* app/widgets/gimpchanneltreeview.c
* app/widgets/gimpvectorstreeview.c: add "clicked" handlers here too
and do the same select-on-alt-click thing.
app/widgets/gimpchanneltreeview.c | 46 ++++++++++++++++++++++++
app/widgets/gimplayertreeview.c | 51 +++++++++++++++++++-------
app/widgets/gimpvectorstreeview.c | 71 +++++++++++++++++++++++++++++--------
3 files changed, 139 insertions(+), 29 deletions(-)
---
diff --git a/app/widgets/gimpchanneltreeview.c b/app/widgets/gimpchanneltreeview.c
index c0c3385..89abfc5 100644
--- a/app/widgets/gimpchanneltreeview.c
+++ b/app/widgets/gimpchanneltreeview.c
@@ -36,12 +36,14 @@
#include "core/gimplayer.h"
#include "core/gimplayermask.h"
+#include "gimpactiongroup.h"
#include "gimpchanneltreeview.h"
#include "gimpcomponenteditor.h"
#include "gimpcontainerview.h"
#include "gimpdnd.h"
#include "gimpdocked.h"
#include "gimphelp-ids.h"
+#include "gimpuimanager.h"
#include "gimpwidgets-utils.h"
#include "gimp-intl.h"
@@ -77,6 +79,11 @@ static void gimp_channel_tree_view_set_context (GimpContainerView *view,
GimpContext *context);
static void gimp_channel_tree_view_set_view_size (GimpContainerView *view);
+static void gimp_channel_tree_view_channel_clicked (GimpCellRendererViewable *cell,
+ const gchar *path_str,
+ GdkModifierType state,
+ GimpContainerTreeView *tree_view);
+
G_DEFINE_TYPE_WITH_CODE (GimpChannelTreeView, gimp_channel_tree_view,
GIMP_TYPE_DRAWABLE_TREE_VIEW,
@@ -165,6 +172,10 @@ gimp_channel_tree_view_constructor (GType type,
view = GIMP_CHANNEL_TREE_VIEW (object);
tree_view = GIMP_CONTAINER_TREE_VIEW (object);
+ g_signal_connect (tree_view->renderer_cell, "clicked",
+ G_CALLBACK (gimp_channel_tree_view_channel_clicked),
+ view);
+
gimp_dnd_viewable_dest_add (GTK_WIDGET (tree_view->view), GIMP_TYPE_LAYER,
NULL, tree_view);
gimp_dnd_viewable_dest_add (GTK_WIDGET (tree_view->view), GIMP_TYPE_LAYER_MASK,
@@ -374,3 +385,38 @@ gimp_channel_tree_view_set_view_size (GimpContainerView *view)
gimp_component_editor_set_view_size (GIMP_COMPONENT_EDITOR (channel_view->priv->component_editor),
view_size);
}
+
+
+/* signal handlers */
+
+static void
+gimp_channel_tree_view_channel_clicked (GimpCellRendererViewable *cell,
+ const gchar *path_str,
+ GdkModifierType state,
+ GimpContainerTreeView *tree_view)
+{
+ if (state & GDK_MOD1_MASK)
+ {
+ GimpUIManager *ui_manager = GIMP_EDITOR (tree_view)->ui_manager;
+ GimpActionGroup *group;
+ const gchar *action = "channels-selection-replace";
+
+ group = gimp_ui_manager_get_action_group (ui_manager, "channels");
+
+ if ((state & GDK_SHIFT_MASK) && (state & GDK_CONTROL_MASK))
+ {
+ action = "channels-selection-intersect";
+ }
+ else if (state & GDK_SHIFT_MASK)
+ {
+ action = "channels-selection-add";
+ }
+ else if (state & GDK_CONTROL_MASK)
+ {
+ action = "channels-selection-subtract";
+ }
+
+ gimp_action_group_activate_action (group, action);
+ }
+}
+
diff --git a/app/widgets/gimplayertreeview.c b/app/widgets/gimplayertreeview.c
index 451d740..ac21a53 100644
--- a/app/widgets/gimplayertreeview.c
+++ b/app/widgets/gimplayertreeview.c
@@ -1319,25 +1319,48 @@ gimp_layer_tree_view_layer_clicked (GimpCellRendererViewable *cell,
if (gtk_tree_model_get_iter (tree_view->model, &iter, path))
{
- GimpViewRenderer *renderer;
- GimpUIManager *ui_manager;
- GimpActionGroup *group;
+ GimpUIManager *ui_manager = GIMP_EDITOR (tree_view)->ui_manager;
+ GimpActionGroup *group;
- ui_manager = GIMP_EDITOR (tree_view)->ui_manager;
- group = gimp_ui_manager_get_action_group (ui_manager, "layers");
+ group = gimp_ui_manager_get_action_group (ui_manager, "layers");
- gtk_tree_model_get (tree_view->model, &iter,
- layer_view->priv->model_column_mask, &renderer,
- -1);
+ if (state & GDK_MOD1_MASK)
+ {
+ const gchar *action = "layers-alpha-selection-replace";
- if (renderer)
+ if ((state & GDK_SHIFT_MASK) && (state & GDK_CONTROL_MASK))
+ {
+ action = "layers-alpha-selection-intersect";
+ }
+ else if (state & GDK_SHIFT_MASK)
+ {
+ action = "layers-alpha-selection-add";
+ }
+ else if (state & GDK_CONTROL_MASK)
+ {
+ action = "layers-alpha-selection-subtract";
+ }
+
+ gimp_action_group_activate_action (group, action);
+ }
+ else
{
- GimpLayerMask *mask = GIMP_LAYER_MASK (renderer->viewable);
+ GimpViewRenderer *renderer;
- if (gimp_layer_mask_get_edit (mask))
- gimp_action_group_set_action_active (group,
- "layers-mask-edit", FALSE);
- g_object_unref (renderer);
+ gtk_tree_model_get (tree_view->model, &iter,
+ layer_view->priv->model_column_mask, &renderer,
+ -1);
+
+ if (renderer)
+ {
+ GimpLayerMask *mask = GIMP_LAYER_MASK (renderer->viewable);
+
+ if (gimp_layer_mask_get_edit (mask))
+ gimp_action_group_set_action_active (group,
+ "layers-mask-edit", FALSE);
+
+ g_object_unref (renderer);
+ }
}
}
diff --git a/app/widgets/gimpvectorstreeview.c b/app/widgets/gimpvectorstreeview.c
index ce933bb..b240a6e 100644
--- a/app/widgets/gimpvectorstreeview.c
+++ b/app/widgets/gimpvectorstreeview.c
@@ -38,9 +38,11 @@
#include "vectors/gimpvectors-export.h"
#include "vectors/gimpvectors-import.h"
+#include "gimpactiongroup.h"
#include "gimpcontainerview.h"
-#include "gimpvectorstreeview.h"
#include "gimpdnd.h"
+#include "gimpuimanager.h"
+#include "gimpvectorstreeview.h"
#include "gimpwidgets-utils.h"
#include "gimp-intl.h"
@@ -48,20 +50,24 @@
static void gimp_vectors_tree_view_view_iface_init (GimpContainerViewInterface *iface);
-static GObject * gimp_vectors_tree_view_constructor (GType type,
- guint n_params,
- GObjectConstructParam *params);
-static void gimp_vectors_tree_view_set_container (GimpContainerView *view,
- GimpContainer *container);
-static void gimp_vectors_tree_view_drop_svg (GimpContainerTreeView *tree_view,
- const gchar *svg_data,
- gsize svg_data_len,
- GimpViewable *dest_viewable,
- GtkTreeViewDropPosition drop_pos);
-static GimpItem * gimp_vectors_tree_view_item_new (GimpImage *image);
-static guchar * gimp_vectors_tree_view_drag_svg (GtkWidget *widget,
- gsize *svg_data_len,
- gpointer data);
+static GObject * gimp_vectors_tree_view_constructor (GType type,
+ guint n_params,
+ GObjectConstructParam *params);
+static void gimp_vectors_tree_view_set_container (GimpContainerView *view,
+ GimpContainer *container);
+static void gimp_vectors_tree_view_drop_svg (GimpContainerTreeView *tree_view,
+ const gchar *svg_data,
+ gsize svg_data_len,
+ GimpViewable *dest_viewable,
+ GtkTreeViewDropPosition drop_pos);
+static GimpItem * gimp_vectors_tree_view_item_new (GimpImage *image);
+static void gimp_vectors_tree_view_vectors_clicked (GimpCellRendererViewable *cell,
+ const gchar *path_str,
+ GdkModifierType state,
+ GimpContainerTreeView *tree_view);
+static guchar * gimp_vectors_tree_view_drag_svg (GtkWidget *widget,
+ gsize *svg_data_len,
+ gpointer data);
G_DEFINE_TYPE_WITH_CODE (GimpVectorsTreeView, gimp_vectors_tree_view,
@@ -139,6 +145,10 @@ gimp_vectors_tree_view_constructor (GType type,
tree_view = GIMP_CONTAINER_TREE_VIEW (object);
view = GIMP_VECTORS_TREE_VIEW (object);
+ g_signal_connect (tree_view->renderer_cell, "clicked",
+ G_CALLBACK (gimp_vectors_tree_view_vectors_clicked),
+ view);
+
/* hide basically useless edit button */
gtk_widget_hide (gimp_item_tree_view_get_edit_button (GIMP_ITEM_TREE_VIEW (view)));
@@ -258,6 +268,37 @@ gimp_vectors_tree_view_item_new (GimpImage *image)
return GIMP_ITEM (new_vectors);
}
+static void
+gimp_vectors_tree_view_vectors_clicked (GimpCellRendererViewable *cell,
+ const gchar *path_str,
+ GdkModifierType state,
+ GimpContainerTreeView *tree_view)
+{
+ if (state & GDK_MOD1_MASK)
+ {
+ GimpUIManager *ui_manager = GIMP_EDITOR (tree_view)->ui_manager;
+ GimpActionGroup *group;
+ const gchar *action = "vectors-selection-replace";
+
+ group = gimp_ui_manager_get_action_group (ui_manager, "vectors");
+
+ if ((state & GDK_SHIFT_MASK) && (state & GDK_CONTROL_MASK))
+ {
+ action = "vectors-selection-intersect";
+ }
+ else if (state & GDK_SHIFT_MASK)
+ {
+ action = "vectors-selection-add";
+ }
+ else if (state & GDK_CONTROL_MASK)
+ {
+ action = "vectors-selection-subtract";
+ }
+
+ gimp_action_group_activate_action (group, action);
+ }
+}
+
static guchar *
gimp_vectors_tree_view_drag_svg (GtkWidget *widget,
gsize *svg_data_len,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]