mirror of
https://gitlab.gnome.org/GNOME/gimp
synced 2024-10-21 12:02:32 +00:00
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.
This commit is contained in:
parent
99ce3bd8b2
commit
0d81ce9717
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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 (renderer)
|
||||
if (state & GDK_MOD1_MASK)
|
||||
{
|
||||
GimpLayerMask *mask = GIMP_LAYER_MASK (renderer->viewable);
|
||||
const gchar *action = "layers-alpha-selection-replace";
|
||||
|
||||
if (gimp_layer_mask_get_edit (mask))
|
||||
gimp_action_group_set_action_active (group,
|
||||
"layers-mask-edit", FALSE);
|
||||
g_object_unref (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
|
||||
{
|
||||
GimpViewRenderer *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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue