mirror of https://github.com/GNOME/gimp.git
app: can't rely on a context being set on a GimpItemTreeView
In GimpLayerTreeView, set the action states using GimpActionGroup instead of using gimp->app directly to look up the actions ( after trying to get the Gimp from a NULL GimpContext). Fixes #9433
This commit is contained in:
parent
a411026b4c
commit
6fcf25b3de
|
@ -337,13 +337,8 @@ gimp_drawable_tree_view_floating_selection_changed (GimpImage *image,
|
||||||
items = g_list_copy (items);
|
items = g_list_copy (items);
|
||||||
|
|
||||||
/* update button states */
|
/* update button states */
|
||||||
g_signal_handlers_block_by_func (gimp_item_tree_view_get_image (GIMP_ITEM_TREE_VIEW (view)),
|
|
||||||
gimp_drawable_tree_view_floating_selection_changed,
|
|
||||||
view);
|
|
||||||
gimp_container_view_select_items (GIMP_CONTAINER_VIEW (view), items);
|
gimp_container_view_select_items (GIMP_CONTAINER_VIEW (view), items);
|
||||||
g_signal_handlers_unblock_by_func (gimp_item_tree_view_get_image (GIMP_ITEM_TREE_VIEW (view)),
|
|
||||||
gimp_drawable_tree_view_floating_selection_changed,
|
|
||||||
view);
|
|
||||||
g_list_free (items);
|
g_list_free (items);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -808,10 +808,10 @@ gimp_layer_tree_view_select_items (GimpContainerView *view,
|
||||||
GList *paths)
|
GList *paths)
|
||||||
{
|
{
|
||||||
GimpContainerTreeView *tree_view = GIMP_CONTAINER_TREE_VIEW (view);
|
GimpContainerTreeView *tree_view = GIMP_CONTAINER_TREE_VIEW (view);
|
||||||
GimpLayerTreeView *layer_view = GIMP_LAYER_TREE_VIEW (view);
|
GimpLayerTreeView *layer_view = GIMP_LAYER_TREE_VIEW (view);
|
||||||
GList *layers = items;
|
GList *layers = items;
|
||||||
GList *path = paths;
|
GList *path = paths;
|
||||||
gboolean success;
|
gboolean success;
|
||||||
|
|
||||||
success = parent_view_iface->select_items (view, items, paths);
|
success = parent_view_iface->select_items (view, items, paths);
|
||||||
|
|
||||||
|
@ -819,13 +819,16 @@ gimp_layer_tree_view_select_items (GimpContainerView *view,
|
||||||
{
|
{
|
||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
for (layers = items, path = paths; layers && path; layers = layers->next, path = path->next)
|
for (layers = items, path = paths;
|
||||||
|
layers && path;
|
||||||
|
layers = layers->next, path = path->next)
|
||||||
{
|
{
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
|
|
||||||
gtk_tree_model_get_iter (tree_view->model, &iter, path->data);
|
gtk_tree_model_get_iter (tree_view->model, &iter, path->data);
|
||||||
gimp_layer_tree_view_update_borders (layer_view, &iter);
|
gimp_layer_tree_view_update_borders (layer_view, &iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
gimp_layer_tree_view_update_options (layer_view, items);
|
gimp_layer_tree_view_update_options (layer_view, items);
|
||||||
gimp_layer_tree_view_update_menu (layer_view, items);
|
gimp_layer_tree_view_update_menu (layer_view, items);
|
||||||
}
|
}
|
||||||
|
@ -1782,16 +1785,14 @@ static void
|
||||||
gimp_layer_tree_view_update_menu (GimpLayerTreeView *layer_view,
|
gimp_layer_tree_view_update_menu (GimpLayerTreeView *layer_view,
|
||||||
GList *layers)
|
GList *layers)
|
||||||
{
|
{
|
||||||
GimpContext *context;
|
GimpUIManager *ui_manager = gimp_editor_get_ui_manager (GIMP_EDITOR (layer_view));
|
||||||
Gimp *gimp;
|
GimpActionGroup *group;
|
||||||
GAction *action;
|
GList *iter;
|
||||||
GList *iter;
|
gboolean have_masks = FALSE;
|
||||||
gboolean have_masks = FALSE;
|
gboolean all_masks_shown = TRUE;
|
||||||
gboolean all_masks_shown = TRUE;
|
gboolean all_masks_disabled = TRUE;
|
||||||
gboolean all_masks_disabled = TRUE;
|
|
||||||
|
|
||||||
context = gimp_container_view_get_context (GIMP_CONTAINER_VIEW (layer_view));
|
group = gimp_ui_manager_get_action_group (ui_manager, "layers");
|
||||||
gimp = context->gimp;
|
|
||||||
|
|
||||||
for (iter = layers; iter; iter = iter->next)
|
for (iter = layers; iter; iter = iter->next)
|
||||||
{
|
{
|
||||||
|
@ -1805,26 +1806,16 @@ gimp_layer_tree_view_update_menu (GimpLayerTreeView *layer_view,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
action = g_action_map_lookup_action (G_ACTION_MAP (gimp->app),
|
gimp_action_group_set_action_active (group, "layers-mask-show",
|
||||||
"layers-mask-show");
|
have_masks && all_masks_shown);
|
||||||
g_return_if_fail (GIMP_IS_TOGGLE_ACTION (action));
|
gimp_action_group_set_action_active (group, "layers-mask-disable",
|
||||||
gimp_toggle_action_set_active (GIMP_TOGGLE_ACTION (action),
|
have_masks && all_masks_disabled);
|
||||||
have_masks && all_masks_shown);
|
|
||||||
|
|
||||||
action = g_action_map_lookup_action (G_ACTION_MAP (gimp->app),
|
|
||||||
"layers-mask-disable");
|
|
||||||
g_return_if_fail (GIMP_IS_TOGGLE_ACTION (action));
|
|
||||||
gimp_toggle_action_set_active (GIMP_TOGGLE_ACTION (action),
|
|
||||||
have_masks && all_masks_disabled);
|
|
||||||
|
|
||||||
/* Only one layer mask at a time can be edited. */
|
/* Only one layer mask at a time can be edited. */
|
||||||
action = g_action_map_lookup_action (G_ACTION_MAP (gimp->app),
|
gimp_action_group_set_action_active (group, "layers-mask-edit",
|
||||||
"layers-mask-edit");
|
g_list_length (layers) == 1 &&
|
||||||
g_return_if_fail (GIMP_IS_TOGGLE_ACTION (action));
|
gimp_layer_get_mask (layers->data) &&
|
||||||
gimp_toggle_action_set_active (GIMP_TOGGLE_ACTION (action),
|
gimp_layer_get_edit_mask (layers->data));
|
||||||
g_list_length (layers) == 1 &&
|
|
||||||
gimp_layer_get_mask (layers->data) &&
|
|
||||||
gimp_layer_get_edit_mask (layers->data));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -2059,8 +2050,13 @@ gimp_layer_tree_view_layer_clicked (GimpCellRendererViewable *cell,
|
||||||
|
|
||||||
if (gtk_tree_model_get_iter (tree_view->model, &iter, path))
|
if (gtk_tree_model_get_iter (tree_view->model, &iter, path))
|
||||||
{
|
{
|
||||||
|
GimpUIManager *ui_manager;
|
||||||
|
GimpActionGroup *group;
|
||||||
GimpViewRenderer *renderer;
|
GimpViewRenderer *renderer;
|
||||||
|
|
||||||
|
ui_manager = gimp_editor_get_ui_manager (GIMP_EDITOR (tree_view));
|
||||||
|
group = gimp_ui_manager_get_action_group (ui_manager, "layers");
|
||||||
|
|
||||||
gtk_tree_model_get (tree_view->model, &iter,
|
gtk_tree_model_get (tree_view->model, &iter,
|
||||||
GIMP_CONTAINER_TREE_STORE_COLUMN_RENDERER, &renderer,
|
GIMP_CONTAINER_TREE_STORE_COLUMN_RENDERER, &renderer,
|
||||||
-1);
|
-1);
|
||||||
|
@ -2161,19 +2157,8 @@ gimp_layer_tree_view_layer_clicked (GimpCellRendererViewable *cell,
|
||||||
/* Simple clicks (without modifiers) activate the layer */
|
/* Simple clicks (without modifiers) activate the layer */
|
||||||
|
|
||||||
if (mask)
|
if (mask)
|
||||||
{
|
gimp_action_group_set_action_active (group,
|
||||||
GimpContext *context;
|
"layers-mask-edit", FALSE);
|
||||||
Gimp *gimp;
|
|
||||||
GAction *action;
|
|
||||||
|
|
||||||
context = gimp_container_view_get_context (GIMP_CONTAINER_VIEW (layer_view));
|
|
||||||
gimp = context->gimp;
|
|
||||||
action = g_action_map_lookup_action (G_ACTION_MAP (gimp->app),
|
|
||||||
"layers-mask-edit");
|
|
||||||
g_return_if_fail (GIMP_IS_TOGGLE_ACTION (action));
|
|
||||||
gimp_toggle_action_set_active (GIMP_TOGGLE_ACTION (action),
|
|
||||||
FALSE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_object_unref (renderer);
|
g_object_unref (renderer);
|
||||||
|
|
Loading…
Reference in New Issue