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;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
gboolean
|
||||||
gimp_drawable_n_editable_filters (GimpDrawable *drawable,
|
gimp_drawable_n_editable_filters (GimpDrawable *drawable,
|
||||||
|
gint *n_editable,
|
||||||
gint *first,
|
gint *first,
|
||||||
gint *last)
|
gint *last)
|
||||||
{
|
{
|
||||||
GList *list;
|
GList *list;
|
||||||
gint index = 0;
|
gboolean editing_blocked = FALSE;
|
||||||
gint n_editable = 0;
|
gint index = 0;
|
||||||
gint first_editable = -1;
|
gint n = 0;
|
||||||
gint last_editable = -1;
|
gint first_editable = -1;
|
||||||
|
gint last_editable = -1;
|
||||||
|
|
||||||
g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), FALSE);
|
g_return_val_if_fail (GIMP_IS_DRAWABLE (drawable), FALSE);
|
||||||
|
|
||||||
|
@ -119,20 +121,18 @@ gimp_drawable_n_editable_filters (GimpDrawable *drawable,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if (temporary)
|
if (temporary)
|
||||||
{
|
editing_blocked = TRUE;
|
||||||
n_editable = 0;
|
else
|
||||||
first_editable = -1;
|
editable = TRUE;
|
||||||
last_editable = -1;
|
}
|
||||||
|
else
|
||||||
break;
|
{
|
||||||
}
|
editing_blocked = TRUE;
|
||||||
|
|
||||||
editable = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (editable)
|
if (editable)
|
||||||
{
|
{
|
||||||
n_editable++;
|
n++;
|
||||||
|
|
||||||
if (first_editable == -1)
|
if (first_editable == -1)
|
||||||
first_editable = index;
|
first_editable = index;
|
||||||
|
@ -141,10 +141,11 @@ gimp_drawable_n_editable_filters (GimpDrawable *drawable,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (first) *first = first_editable;
|
if (n_editable) *n_editable = n;
|
||||||
if (last) *last = last_editable;
|
if (first) *first = first_editable;
|
||||||
|
if (last) *last = last_editable;
|
||||||
|
|
||||||
return n_editable;
|
return ! editing_blocked;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -33,7 +33,8 @@ GimpContainer * gimp_drawable_get_filters (GimpDrawable *drawable);
|
||||||
|
|
||||||
gboolean gimp_drawable_has_visible_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 *first,
|
||||||
gint *last);
|
gint *last);
|
||||||
|
|
||||||
|
|
|
@ -140,8 +140,8 @@ _gimp_drawable_tree_view_filter_editor_show (GimpDrawableTreeView *view,
|
||||||
GimpContainerTreeView *tree_view = GIMP_CONTAINER_TREE_VIEW (view);
|
GimpContainerTreeView *tree_view = GIMP_CONTAINER_TREE_VIEW (view);
|
||||||
GimpContainer *filters;
|
GimpContainer *filters;
|
||||||
GList *list;
|
GList *list;
|
||||||
gint n_children = 0;
|
gint n_editable;
|
||||||
gboolean visible = FALSE;
|
gboolean visible = FALSE;
|
||||||
|
|
||||||
if (! editor)
|
if (! editor)
|
||||||
{
|
{
|
||||||
|
@ -307,8 +307,6 @@ _gimp_drawable_tree_view_filter_editor_show (GimpDrawableTreeView *view,
|
||||||
{
|
{
|
||||||
if (gimp_filter_get_active (list->data))
|
if (gimp_filter_get_active (list->data))
|
||||||
visible = TRUE;
|
visible = TRUE;
|
||||||
|
|
||||||
n_children++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -322,8 +320,10 @@ _gimp_drawable_tree_view_filter_editor_show (GimpDrawableTreeView *view,
|
||||||
gimp_drawable_filters_editor_visible_all_toggled,
|
gimp_drawable_filters_editor_visible_all_toggled,
|
||||||
view);
|
view);
|
||||||
|
|
||||||
/* Only show if we have at least one active filter */
|
gimp_drawable_n_editable_filters (drawable, &n_editable, NULL, NULL);
|
||||||
if (n_children > 0)
|
|
||||||
|
/* only show if we have at least one editable filter */
|
||||||
|
if (n_editable > 0)
|
||||||
{
|
{
|
||||||
GtkCellRenderer *renderer;
|
GtkCellRenderer *renderer;
|
||||||
GtkTreeViewColumn *column;
|
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_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
|
||||||
GTK_POLICY_NEVER,
|
GTK_POLICY_NEVER,
|
||||||
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);
|
gimp_drawable_filters_editor_set_sensitive (view);
|
||||||
|
|
||||||
|
@ -474,18 +473,19 @@ static void
|
||||||
gimp_drawable_filters_editor_set_sensitive (GimpDrawableTreeView *view)
|
gimp_drawable_filters_editor_set_sensitive (GimpDrawableTreeView *view)
|
||||||
{
|
{
|
||||||
GimpDrawableTreeViewFiltersEditor *editor= view->editor;
|
GimpDrawableTreeViewFiltersEditor *editor= view->editor;
|
||||||
|
gboolean editable;
|
||||||
gint n_editable;
|
gint n_editable;
|
||||||
gint first_editable;
|
gint first_editable;
|
||||||
gint last_editable;
|
gint last_editable;
|
||||||
|
|
||||||
n_editable = gimp_drawable_n_editable_filters (editor->drawable,
|
editable = gimp_drawable_n_editable_filters (editor->drawable,
|
||||||
&first_editable,
|
&n_editable,
|
||||||
&last_editable);
|
&first_editable,
|
||||||
|
&last_editable);
|
||||||
|
|
||||||
gtk_widget_set_sensitive (editor->vbox, n_editable > 0);
|
/* lock everything if none is editable */
|
||||||
|
gtk_widget_set_sensitive (editor->vbox, editable);
|
||||||
/* lock filter options if none is editable */
|
if (! editable)
|
||||||
if (n_editable == 0)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gtk_widget_set_sensitive (editor->options,
|
gtk_widget_set_sensitive (editor->options,
|
||||||
|
@ -630,6 +630,19 @@ static void
|
||||||
gimp_drawable_filters_editor_filters_changed (GimpDrawable *drawable,
|
gimp_drawable_filters_editor_filters_changed (GimpDrawable *drawable,
|
||||||
GimpDrawableTreeView *view)
|
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);
|
gimp_drawable_filters_editor_set_sensitive (view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,9 +56,6 @@
|
||||||
#include "gimp-intl.h"
|
#include "gimp-intl.h"
|
||||||
|
|
||||||
|
|
||||||
#define COLUMN_FILTERS_ACTIVE 3
|
|
||||||
|
|
||||||
|
|
||||||
struct _GimpDrawableTreeViewPrivate
|
struct _GimpDrawableTreeViewPrivate
|
||||||
{
|
{
|
||||||
GtkWidget *filters_header_image;
|
GtkWidget *filters_header_image;
|
||||||
|
@ -573,11 +570,13 @@ gimp_drawable_tree_view_filters_changed (GimpDrawable *drawable,
|
||||||
|
|
||||||
if (iter)
|
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,
|
gtk_tree_store_set (GTK_TREE_STORE (tree_view->model), iter,
|
||||||
view->priv->model_column_filters,
|
view->priv->model_column_filters,
|
||||||
n_filters > 0,
|
n_editable > 0,
|
||||||
-1);
|
-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,
|
gtk_tree_view_convert_bin_window_to_widget_coords (GIMP_CONTAINER_TREE_VIEW (view)->view,
|
||||||
rect.x, rect.y, &rect.x, &rect.y);
|
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);
|
_gimp_drawable_tree_view_filter_editor_show (view, drawable, &rect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue