mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-03 17:33:25 +00:00
app: always show the filters popover if there are any potentially
editable filters, regardless of whether they are currently editable. Also an ugly hack to make sure the popover resizes corrently with the number of filters.
This commit is contained in:
parent
27b09025be
commit
90db039270
4 changed files with 53 additions and 41 deletions
|
@ -90,16 +90,18 @@ gimp_drawable_has_visible_filters (GimpDrawable *drawable)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
gint
|
||||
gboolean
|
||||
gimp_drawable_n_editable_filters (GimpDrawable *drawable,
|
||||
gint *n_editable,
|
||||
gint *first,
|
||||
gint *last)
|
||||
{
|
||||
GList *list;
|
||||
gint index = 0;
|
||||
gint n_editable = 0;
|
||||
gint first_editable = -1;
|
||||
gint last_editable = -1;
|
||||
GList *list;
|
||||
gboolean editing_blocked = FALSE;
|
||||
gint index = 0;
|
||||
gint n = 0;
|
||||
gint first_editable = -1;
|
||||
gint last_editable = -1;
|
||||
|
||||
g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), FALSE);
|
||||
|
||||
|
@ -119,20 +121,18 @@ gimp_drawable_n_editable_filters (GimpDrawable *drawable,
|
|||
NULL);
|
||||
|
||||
if (temporary)
|
||||
{
|
||||
n_editable = 0;
|
||||
first_editable = -1;
|
||||
last_editable = -1;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
editable = TRUE;
|
||||
editing_blocked = TRUE;
|
||||
else
|
||||
editable = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
editing_blocked = TRUE;
|
||||
}
|
||||
|
||||
if (editable)
|
||||
{
|
||||
n_editable++;
|
||||
n++;
|
||||
|
||||
if (first_editable == -1)
|
||||
first_editable = index;
|
||||
|
@ -141,10 +141,11 @@ gimp_drawable_n_editable_filters (GimpDrawable *drawable,
|
|||
}
|
||||
}
|
||||
|
||||
if (first) *first = first_editable;
|
||||
if (last) *last = last_editable;
|
||||
if (n_editable) *n_editable = n;
|
||||
if (first) *first = first_editable;
|
||||
if (last) *last = last_editable;
|
||||
|
||||
return n_editable;
|
||||
return ! editing_blocked;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -33,7 +33,8 @@ GimpContainer * gimp_drawable_get_filters (GimpDrawable *drawable);
|
|||
|
||||
gboolean gimp_drawable_has_visible_filters (GimpDrawable *drawable);
|
||||
|
||||
gint gimp_drawable_n_editable_filters (GimpDrawable *drawable,
|
||||
gboolean gimp_drawable_n_editable_filters (GimpDrawable *drawable,
|
||||
gint *n_editable,
|
||||
gint *first,
|
||||
gint *last);
|
||||
|
||||
|
|
|
@ -140,8 +140,8 @@ _gimp_drawable_tree_view_filter_editor_show (GimpDrawableTreeView *view,
|
|||
GimpContainerTreeView *tree_view = GIMP_CONTAINER_TREE_VIEW (view);
|
||||
GimpContainer *filters;
|
||||
GList *list;
|
||||
gint n_children = 0;
|
||||
gboolean visible = FALSE;
|
||||
gint n_editable;
|
||||
gboolean visible = FALSE;
|
||||
|
||||
if (! editor)
|
||||
{
|
||||
|
@ -307,8 +307,6 @@ _gimp_drawable_tree_view_filter_editor_show (GimpDrawableTreeView *view,
|
|||
{
|
||||
if (gimp_filter_get_active (list->data))
|
||||
visible = TRUE;
|
||||
|
||||
n_children++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -322,8 +320,10 @@ _gimp_drawable_tree_view_filter_editor_show (GimpDrawableTreeView *view,
|
|||
gimp_drawable_filters_editor_visible_all_toggled,
|
||||
view);
|
||||
|
||||
/* Only show if we have at least one active filter */
|
||||
if (n_children > 0)
|
||||
gimp_drawable_n_editable_filters (drawable, &n_editable, NULL, NULL);
|
||||
|
||||
/* only show if we have at least one editable filter */
|
||||
if (n_editable > 0)
|
||||
{
|
||||
GtkCellRenderer *renderer;
|
||||
GtkTreeViewColumn *column;
|
||||
|
@ -401,7 +401,6 @@ _gimp_drawable_tree_view_filter_editor_show (GimpDrawableTreeView *view,
|
|||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
|
||||
GTK_POLICY_NEVER,
|
||||
GTK_POLICY_NEVER);
|
||||
gtk_widget_set_size_request (editor->vbox, -1, 24 * (n_children + 1));
|
||||
|
||||
gimp_drawable_filters_editor_set_sensitive (view);
|
||||
|
||||
|
@ -474,18 +473,19 @@ static void
|
|||
gimp_drawable_filters_editor_set_sensitive (GimpDrawableTreeView *view)
|
||||
{
|
||||
GimpDrawableTreeViewFiltersEditor *editor= view->editor;
|
||||
gboolean editable;
|
||||
gint n_editable;
|
||||
gint first_editable;
|
||||
gint last_editable;
|
||||
|
||||
n_editable = gimp_drawable_n_editable_filters (editor->drawable,
|
||||
&first_editable,
|
||||
&last_editable);
|
||||
editable = gimp_drawable_n_editable_filters (editor->drawable,
|
||||
&n_editable,
|
||||
&first_editable,
|
||||
&last_editable);
|
||||
|
||||
gtk_widget_set_sensitive (editor->vbox, n_editable > 0);
|
||||
|
||||
/* lock filter options if none is editable */
|
||||
if (n_editable == 0)
|
||||
/* lock everything if none is editable */
|
||||
gtk_widget_set_sensitive (editor->vbox, editable);
|
||||
if (! editable)
|
||||
return;
|
||||
|
||||
gtk_widget_set_sensitive (editor->options,
|
||||
|
@ -630,6 +630,19 @@ static void
|
|||
gimp_drawable_filters_editor_filters_changed (GimpDrawable *drawable,
|
||||
GimpDrawableTreeView *view)
|
||||
{
|
||||
GimpContainer *filters;
|
||||
gint n_filters;
|
||||
gint height;
|
||||
|
||||
filters = gimp_drawable_get_filters (drawable);
|
||||
n_filters = gimp_container_get_n_children (filters);
|
||||
|
||||
height = gimp_container_view_get_view_size (GIMP_CONTAINER_VIEW (view->editor->view), NULL);
|
||||
|
||||
/* it doesn't get any more hackish */
|
||||
gtk_widget_set_size_request (view->editor->view,
|
||||
-1, (height + 6) * n_filters);
|
||||
|
||||
gimp_drawable_filters_editor_set_sensitive (view);
|
||||
}
|
||||
|
||||
|
|
|
@ -56,9 +56,6 @@
|
|||
#include "gimp-intl.h"
|
||||
|
||||
|
||||
#define COLUMN_FILTERS_ACTIVE 3
|
||||
|
||||
|
||||
struct _GimpDrawableTreeViewPrivate
|
||||
{
|
||||
GtkWidget *filters_header_image;
|
||||
|
@ -573,11 +570,13 @@ gimp_drawable_tree_view_filters_changed (GimpDrawable *drawable,
|
|||
|
||||
if (iter)
|
||||
{
|
||||
gint n_filters = gimp_drawable_n_editable_filters (drawable, NULL, NULL);
|
||||
gint n_editable;
|
||||
|
||||
gimp_drawable_n_editable_filters (drawable, &n_editable, NULL, NULL);
|
||||
|
||||
gtk_tree_store_set (GTK_TREE_STORE (tree_view->model), iter,
|
||||
view->priv->model_column_filters,
|
||||
n_filters > 0,
|
||||
n_editable > 0,
|
||||
-1);
|
||||
}
|
||||
}
|
||||
|
@ -613,8 +612,6 @@ gimp_drawable_tree_view_filters_cell_clicked (GtkCellRendererToggle *toggle,
|
|||
gtk_tree_view_convert_bin_window_to_widget_coords (GIMP_CONTAINER_TREE_VIEW (view)->view,
|
||||
rect.x, rect.y, &rect.x, &rect.y);
|
||||
|
||||
gimp_drawable_tree_view_filters_changed (drawable, view);
|
||||
|
||||
_gimp_drawable_tree_view_filter_editor_show (view, drawable, &rect);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue