mirror of https://github.com/GNOME/gimp.git
app: Only show active dockables in dock window titles
Refactor stuff a bit so that the dock window description can be both short and long. The short version only have the active dockables, and the long version have all the dockables in the description string. We use the short version for the window title and the long version for the Recently Closed Docks menu items.
This commit is contained in:
parent
a915132ee6
commit
520da707c1
|
@ -72,7 +72,8 @@ struct _GimpDockPrivate
|
|||
static void gimp_dock_style_set (GtkWidget *widget,
|
||||
GtkStyle *prev_style);
|
||||
static void gimp_dock_destroy (GtkObject *object);
|
||||
static gchar * gimp_dock_real_get_description (GimpDock *dock);
|
||||
static gchar * gimp_dock_real_get_description (GimpDock *dock,
|
||||
gboolean complete);
|
||||
static void gimp_dock_real_book_added (GimpDock *dock,
|
||||
GimpDockbook *dockbook);
|
||||
static void gimp_dock_real_book_removed (GimpDock *dock,
|
||||
|
@ -245,7 +246,8 @@ gimp_dock_destroy (GtkObject *object)
|
|||
}
|
||||
|
||||
static gchar *
|
||||
gimp_dock_real_get_description (GimpDock *dock)
|
||||
gimp_dock_real_get_description (GimpDock *dock,
|
||||
gboolean complete)
|
||||
{
|
||||
GString *desc;
|
||||
GList *list;
|
||||
|
@ -260,7 +262,22 @@ gimp_dock_real_get_description (GimpDock *dock)
|
|||
GList *children;
|
||||
GList *child;
|
||||
|
||||
children = gtk_container_get_children (GTK_CONTAINER (dockbook));
|
||||
if (complete)
|
||||
{
|
||||
/* Include all dockables */
|
||||
children = gtk_container_get_children (GTK_CONTAINER (dockbook));
|
||||
}
|
||||
else
|
||||
{
|
||||
GtkWidget *dockable = NULL;
|
||||
gint page_num = 0;
|
||||
|
||||
page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (dockbook));
|
||||
dockable = gtk_notebook_get_nth_page (GTK_NOTEBOOK (dockbook), page_num);
|
||||
|
||||
/* Only include active dockables */
|
||||
children = g_list_append (NULL, dockable);
|
||||
}
|
||||
|
||||
for (child = children; child; child = g_list_next (child))
|
||||
{
|
||||
|
@ -285,12 +302,18 @@ static void
|
|||
gimp_dock_real_book_added (GimpDock *dock,
|
||||
GimpDockbook *dockbook)
|
||||
{
|
||||
g_signal_connect_object (dockbook, "switch-page",
|
||||
G_CALLBACK (gimp_dock_invalidate_description),
|
||||
dock, G_CONNECT_SWAPPED);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_dock_real_book_removed (GimpDock *dock,
|
||||
GimpDockbook *dockbook)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (dockbook,
|
||||
gimp_dock_invalidate_description,
|
||||
dock);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -367,13 +390,22 @@ gimp_dock_get_dock_columns (GimpDock *dock)
|
|||
|
||||
/* public functions */
|
||||
|
||||
/**
|
||||
* gimp_dock_get_description:
|
||||
* @dock:
|
||||
* @complete: If %TRUE, only includes the active dockables, i.e. not the
|
||||
* dockables in a non-active GtkNotebook tab
|
||||
*
|
||||
* Returns: A string describing the contents of the dock.
|
||||
**/
|
||||
gchar *
|
||||
gimp_dock_get_description (GimpDock *dock)
|
||||
gimp_dock_get_description (GimpDock *dock,
|
||||
gboolean complete)
|
||||
{
|
||||
g_return_val_if_fail (GIMP_IS_DOCK (dock), NULL);
|
||||
|
||||
if (GIMP_DOCK_GET_CLASS (dock)->get_description)
|
||||
return GIMP_DOCK_GET_CLASS (dock)->get_description (dock);
|
||||
return GIMP_DOCK_GET_CLASS (dock)->get_description (dock, complete);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -64,7 +64,8 @@ struct _GimpDockClass
|
|||
GtkVBoxClass parent_class;
|
||||
|
||||
/* virtual functions */
|
||||
gchar * (* get_description) (GimpDock *dock);
|
||||
gchar * (* get_description) (GimpDock *dock,
|
||||
gboolean complete);
|
||||
void (* set_host_geometry_hints) (GimpDock *dock,
|
||||
GtkWindow *window);
|
||||
|
||||
|
@ -80,7 +81,8 @@ struct _GimpDockClass
|
|||
|
||||
GType gimp_dock_get_type (void) G_GNUC_CONST;
|
||||
|
||||
gchar * gimp_dock_get_description (GimpDock *dock);
|
||||
gchar * gimp_dock_get_description (GimpDock *dock,
|
||||
gboolean complete);
|
||||
void gimp_dock_set_host_geometry_hints (GimpDock *dock,
|
||||
GtkWindow *window);
|
||||
void gimp_dock_invalidate_geometry (GimpDock *dock);
|
||||
|
|
|
@ -137,6 +137,8 @@ static void gimp_dock_window_image_flush (GimpImage
|
|||
GimpDockWindow *dock_window);
|
||||
static void gimp_dock_window_update_title (GimpDockWindow *dock_window);
|
||||
static gboolean gimp_dock_window_update_title_idle (GimpDockWindow *dock_window);
|
||||
static gchar * gimp_dock_window_get_description (GimpDockWindow *dock_window,
|
||||
gboolean complete);
|
||||
static void gimp_dock_window_dock_removed (GimpDockWindow *dock_window,
|
||||
GimpDock *dock,
|
||||
GimpDockColumns *dock_columns);
|
||||
|
@ -626,6 +628,7 @@ gimp_dock_window_delete_event (GtkWidget *widget,
|
|||
GimpSessionInfo *info = NULL;
|
||||
const gchar *entry_name = NULL;
|
||||
GimpDialogFactoryEntry *entry = NULL;
|
||||
gchar *name = NULL;
|
||||
|
||||
/* Don't add docks with just a singe dockable to the list of
|
||||
* recently closed dock since those can be brought back through the
|
||||
|
@ -636,8 +639,9 @@ gimp_dock_window_delete_event (GtkWidget *widget,
|
|||
|
||||
info = gimp_session_info_new ();
|
||||
|
||||
gimp_object_set_name (GIMP_OBJECT (info),
|
||||
gtk_window_get_title (GTK_WINDOW (dock_window)));
|
||||
name = gimp_dock_window_get_description (dock_window, TRUE /*complete*/);
|
||||
gimp_object_set_name (GIMP_OBJECT (info), name);
|
||||
g_free (name);
|
||||
|
||||
gimp_session_info_set_widget (info, GTK_WIDGET (dock_window));
|
||||
gimp_session_info_get_info (info);
|
||||
|
@ -730,29 +734,36 @@ gimp_dock_window_update_title (GimpDockWindow *dock_window)
|
|||
static gboolean
|
||||
gimp_dock_window_update_title_idle (GimpDockWindow *dock_window)
|
||||
{
|
||||
GString *complete_title = g_string_new ("");
|
||||
GList *iter = NULL;
|
||||
gchar *desc = gimp_dock_window_get_description (dock_window,
|
||||
FALSE /*complete*/);
|
||||
if (desc != NULL)
|
||||
gtk_window_set_title (GTK_WINDOW (dock_window), desc);
|
||||
|
||||
dock_window->p->update_title_idle_id = 0;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gchar *
|
||||
gimp_dock_window_get_description (GimpDockWindow *dock_window,
|
||||
gboolean complete)
|
||||
{
|
||||
GString *complete_desc = g_string_new (NULL);
|
||||
GList *iter = NULL;
|
||||
|
||||
for (iter = gimp_dock_window_get_docks (dock_window);
|
||||
iter;
|
||||
iter = g_list_next (iter))
|
||||
{
|
||||
gchar *title = gimp_dock_get_description (GIMP_DOCK (iter->data));
|
||||
g_string_append (complete_title, title);
|
||||
g_free (title);
|
||||
gchar *desc = gimp_dock_get_description (GIMP_DOCK (iter->data), complete);
|
||||
g_string_append (complete_desc, desc);
|
||||
g_free (desc);
|
||||
|
||||
if (g_list_next (iter))
|
||||
g_string_append (complete_title, GIMP_DOCK_COLUMN_SEPARATOR);
|
||||
g_string_append (complete_desc, GIMP_DOCK_COLUMN_SEPARATOR);
|
||||
}
|
||||
|
||||
if (complete_title->len > 0)
|
||||
gtk_window_set_title (GTK_WINDOW (dock_window), complete_title->str);
|
||||
|
||||
g_string_free (complete_title, TRUE /*free_segment*/);
|
||||
|
||||
dock_window->p->update_title_idle_id = 0;
|
||||
|
||||
return FALSE;
|
||||
return g_string_free (complete_desc, FALSE /*free_segment*/);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -132,7 +132,8 @@ static gboolean gimp_toolbox_drag_drop (GtkWidget *
|
|||
gint y,
|
||||
guint time,
|
||||
GimpToolbox *toolbox);
|
||||
static gchar * gimp_toolbox_get_description (GimpDock *dock);
|
||||
static gchar * gimp_toolbox_get_description (GimpDock *dock,
|
||||
gboolean complete);
|
||||
static void gimp_toolbox_set_host_geometry_hints (GimpDock *dock,
|
||||
GtkWindow *window);
|
||||
static void gimp_toolbox_book_added (GimpDock *dock,
|
||||
|
@ -767,10 +768,12 @@ gimp_toolbox_drag_drop (GtkWidget *widget,
|
|||
}
|
||||
|
||||
static gchar *
|
||||
gimp_toolbox_get_description (GimpDock *dock)
|
||||
gimp_toolbox_get_description (GimpDock *dock,
|
||||
gboolean complete)
|
||||
{
|
||||
GString *desc = g_string_new (_("Toolbox"));
|
||||
gchar *dock_desc = GIMP_DOCK_CLASS (parent_class)->get_description (dock);
|
||||
gchar *dock_desc = GIMP_DOCK_CLASS (parent_class)->get_description (dock,
|
||||
complete);
|
||||
|
||||
if (dock_desc && strlen (dock_desc) > 0)
|
||||
{
|
||||
|
@ -787,6 +790,9 @@ static void
|
|||
gimp_toolbox_book_added (GimpDock *dock,
|
||||
GimpDockbook *dockbook)
|
||||
{
|
||||
if (GIMP_DOCK_CLASS (gimp_toolbox_parent_class)->book_added)
|
||||
GIMP_DOCK_CLASS (gimp_toolbox_parent_class)->book_added (dock, dockbook);
|
||||
|
||||
if (g_list_length (gimp_dock_get_dockbooks (dock)) == 1)
|
||||
{
|
||||
gimp_dock_invalidate_geometry (dock);
|
||||
|
@ -797,6 +803,9 @@ static void
|
|||
gimp_toolbox_book_removed (GimpDock *dock,
|
||||
GimpDockbook *dockbook)
|
||||
{
|
||||
if (GIMP_DOCK_CLASS (gimp_toolbox_parent_class)->book_removed)
|
||||
GIMP_DOCK_CLASS (gimp_toolbox_parent_class)->book_removed (dock, dockbook);
|
||||
|
||||
if (g_list_length (gimp_dock_get_dockbooks (dock)) == 0 &&
|
||||
! (GTK_OBJECT_FLAGS (dock) & GTK_IN_DESTRUCTION))
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue