Commit 4ab58d2e authored by Martin Nordholts's avatar Martin Nordholts

app: Have only one GimpDialogFactoryEntry member in GimpSessionInfo

Simplify the code a bit by replacing the 'toplevel_entry' and
'dockable_entry' members in GimpSessionInfo with a single
'factory_entry'. We compensate for this by adding a 'dockable'
gboolean to GimpDialogFactoryEntry.
parent 44d5728d
......@@ -50,11 +50,11 @@ GimpContainer *global_recent_docks = NULL;
#define FOREIGN(id, singleton, remember_size) \
{ id, NULL, NULL, NULL, NULL, \
NULL, 0, singleton, TRUE, remember_size, FALSE }
NULL, 0, singleton, TRUE, remember_size, FALSE, FALSE }
#define TOPLEVEL(id, new_func, singleton, session_managed, remember_size) \
{ id, NULL, NULL, NULL, NULL, \
new_func, 0, singleton, session_managed, remember_size, FALSE }
new_func, 0, singleton, session_managed, remember_size, FALSE, FALSE }
static const GimpDialogFactoryEntry toplevel_entries[] =
......@@ -123,14 +123,14 @@ static const GimpDialogFactoryEntry toplevel_entries[] =
#define DOCKABLE(id,name,blurb,stock_id,help_id,\
new_func,view_size,singleton) \
{ id, name, blurb, stock_id, help_id, \
new_func, view_size, singleton, FALSE, FALSE, TRUE }
new_func, view_size, singleton, FALSE, FALSE, TRUE, TRUE }
#define LISTGRID(id,name,blurb,stock_id,help_id,\
view_size) \
{ "gimp-"#id"-list", name, blurb, stock_id, help_id, \
dialogs_##id##_list_view_new, view_size, FALSE, FALSE, FALSE, TRUE }, \
dialogs_##id##_list_view_new, view_size, FALSE, FALSE, FALSE, TRUE, TRUE }, \
{ "gimp-"#id"-grid", name, blurb, stock_id, help_id, \
dialogs_##id##_grid_view_new, view_size, FALSE, FALSE, FALSE, TRUE }
dialogs_##id##_grid_view_new, view_size, FALSE, FALSE, FALSE, TRUE, TRUE }
static const GimpDialogFactoryEntry dock_entries[] =
{
......
......@@ -153,13 +153,13 @@ session_init (Gimp *gimp)
*/
if (!g_str_equal (entry_name, "dock"))
{
info->toplevel_entry = gimp_dialog_factory_find_entry (factory,
entry_name);
info->factory_entry = gimp_dialog_factory_find_entry (factory,
entry_name);
/* If we expected a dialog factory entry but failed
* to find one, skip to add this session info object
*/
skip = (info->toplevel_entry == NULL);
skip = (info->factory_entry == NULL);
}
g_free (entry_name);
......
......@@ -387,10 +387,8 @@ gimp_dialog_factory_find_session_info (GimpDialogFactory *factory,
{
GimpSessionInfo *info = list->data;
if ((info->toplevel_entry &&
! strcmp (identifier, info->toplevel_entry->identifier)) ||
(info->dockable_entry &&
! strcmp (identifier, info->dockable_entry->identifier)))
if (info->factory_entry &&
g_str_equal (identifier, info->factory_entry->identifier))
{
return info;
}
......@@ -823,8 +821,7 @@ gimp_dialog_factory_add_dialog (GimpDialogFactory *factory,
{
GimpSessionInfo *current_info = list->data;
if ((current_info->toplevel_entry == entry) ||
(current_info->dockable_entry == entry))
if (current_info->factory_entry == entry)
{
if (current_info->widget)
{
......@@ -875,24 +872,17 @@ gimp_dialog_factory_add_dialog (GimpDialogFactory *factory,
toplevel ? "toplevel" : "dockable",
entry->identifier);
if (toplevel)
{
info->toplevel_entry = entry;
info->factory_entry = entry;
/* if we create a new session info, we never call
* gimp_session_info_set_geometry(), but still the
* dialog needs GDK_HINT_USER_POS so it keeps its
* position when hidden/shown within this(!) session.
*/
if (gimp_session_info_is_session_managed (info))
g_signal_connect (dialog, "configure-event",
G_CALLBACK (gimp_dialog_factory_set_user_pos),
NULL);
}
else
{
info->dockable_entry = entry;
}
/* if we create a new session info, we never call
* gimp_session_info_set_geometry(), but still the
* dialog needs GDK_HINT_USER_POS so it keeps its
* position when hidden/shown within this(!) session.
*/
if (gimp_session_info_is_session_managed (info))
g_signal_connect (dialog, "configure-event",
G_CALLBACK (gimp_dialog_factory_set_user_pos),
NULL);
factory->session_infos = g_list_append (factory->session_infos, info);
}
......@@ -906,8 +896,7 @@ gimp_dialog_factory_add_dialog (GimpDialogFactory *factory,
GimpSessionInfo *current_info = list->data;
/* take the first empty slot */
if (! current_info->toplevel_entry &&
! current_info->dockable_entry &&
if (! current_info->factory_entry &&
! current_info->widget)
{
current_info->widget = dialog;
......@@ -1429,8 +1418,8 @@ gimp_dialog_factories_save_foreach (gconstpointer key,
gimp_config_writer_string (writer,
gimp_object_get_name (factory));
gimp_config_writer_string (writer,
info->toplevel_entry ?
info->toplevel_entry->identifier :
info->factory_entry ?
info->factory_entry->identifier :
"dock");
GIMP_CONFIG_GET_INTERFACE (info)->serialize (GIMP_CONFIG (info),
......
......@@ -58,6 +58,11 @@ struct _GimpDialogFactoryEntry
gboolean session_managed;
gboolean remember_size;
gboolean remember_if_open;
/* If TRUE the entry is for a dockable, otherwise it is for a
* toplevel
*/
gboolean dockable;
};
......
......@@ -268,7 +268,7 @@ gimp_session_info_deserialize (GimpConfig *config,
break;
case SESSION_INFO_DOCK:
if (info->toplevel_entry)
if (info->factory_entry)
goto error;
g_scanner_set_scope (scanner, scope_id + 1);
......@@ -323,8 +323,7 @@ gimp_session_info_deserialize (GimpConfig *config,
static gboolean
gimp_session_info_is_for_dock (GimpSessionInfo *info)
{
gboolean entry_state_for_dock = (! info->toplevel_entry &&
! info->dockable_entry);
gboolean entry_state_for_dock = info->factory_entry == NULL;
gboolean widget_state_for_dock = (info->widget == NULL ||
GIMP_IS_DOCK (info->widget));
......@@ -361,14 +360,14 @@ gimp_session_info_restore (GimpSessionInfo *info,
info->open = FALSE;
info->screen = DEFAULT_SCREEN;
if (info->toplevel_entry)
if (info->factory_entry && ! info->factory_entry->dockable)
{
GtkWidget *dialog;
dialog =
gimp_dialog_factory_dialog_new (factory, screen,
info->toplevel_entry->identifier,
info->toplevel_entry->view_size,
info->factory_entry->identifier,
info->factory_entry->view_size,
TRUE);
if (dialog && info->aux_info)
......@@ -574,7 +573,9 @@ gimp_session_info_get_info (GimpSessionInfo *info)
info->aux_info = gimp_session_info_aux_get_list (info->widget);
if (! info->toplevel_entry)
if (info->factory_entry == NULL ||
(info->factory_entry &&
info->factory_entry->dockable))
info->books = gimp_session_info_dock_from_widget (GIMP_DOCK (info->widget));
}
......@@ -606,8 +607,8 @@ gimp_session_info_is_singleton (GimpSessionInfo *info)
g_return_val_if_fail (GIMP_IS_SESSION_INFO (info), FALSE);
return (! gimp_session_info_is_for_dock (info) &&
info->toplevel_entry &&
info->toplevel_entry->singleton);
info->factory_entry &&
info->factory_entry->singleton);
}
gboolean
......@@ -616,8 +617,8 @@ gimp_session_info_is_session_managed (GimpSessionInfo *info)
g_return_val_if_fail (GIMP_IS_SESSION_INFO (info), FALSE);
return (gimp_session_info_is_for_dock (info) ||
(info->toplevel_entry &&
info->toplevel_entry->session_managed));
(info->factory_entry &&
info->factory_entry->session_managed));
}
......@@ -627,8 +628,8 @@ gimp_session_info_get_remember_size (GimpSessionInfo *info)
g_return_val_if_fail (GIMP_IS_SESSION_INFO (info), FALSE);
return (gimp_session_info_is_for_dock (info) ||
(info->toplevel_entry &&
info->toplevel_entry->remember_size));
(info->factory_entry &&
info->factory_entry->remember_size));
}
gboolean
......@@ -637,6 +638,6 @@ gimp_session_info_get_remember_if_open (GimpSessionInfo *info)
g_return_val_if_fail (GIMP_IS_SESSION_INFO (info), FALSE);
return (gimp_session_info_is_for_dock (info) ||
(info->toplevel_entry &&
info->toplevel_entry->remember_if_open));
(info->factory_entry &&
info->factory_entry->remember_if_open));
}
......@@ -59,9 +59,10 @@ struct _GimpSessionInfo
GtkWidget *widget;
/* only one of these is valid */
GimpDialogFactoryEntry *toplevel_entry;
GimpDialogFactoryEntry *dockable_entry;
/* the dialog factory entry for object we have session info for
* note that pure "dock" entries don't have any factory entry
*/
GimpDialogFactoryEntry *factory_entry;
/* list of GimpSessionInfoBook */
GList *books;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment