26
26
#include <gtk/gtk.h>
28
#include "libgimpconfig/gimpconfig.h"
28
30
#include "widgets-types.h"
30
#include "config/gimpconfig-serialize.h"
31
#include "config/gimpconfigwriter.h"
32
#include "config/gimpscanner.h"
34
32
#include "gimpcontainerview.h"
35
33
#include "gimpcontainerview-utils.h"
36
34
#include "gimpdialogfactory.h"
56
54
SESSION_INFO_DOCKABLE,
58
56
SESSION_INFO_DOCKABLE_TAB_STYLE,
59
SESSION_INFO_DOCKABLE_PREVIEW_SIZE,
57
SESSION_INFO_DOCKABLE_VIEW_SIZE,
60
58
SESSION_INFO_DOCKABLE_AUX
444
442
view = gimp_container_view_get_by_dockable (dockable);
447
preview_size = gimp_container_view_get_preview_size (view,
445
view_size = gimp_container_view_get_view_size (view, NULL);
450
if (preview_size > 0 &&
451
preview_size != entry->preview_size)
448
view_size != entry->view_size)
453
450
gimp_config_writer_open (writer, "preview-size");
454
gimp_config_writer_printf (writer, "%d", preview_size);
451
gimp_config_writer_printf (writer, "%d", view_size);
455
452
gimp_config_writer_close (writer);
534
531
g_scanner_scope_add_symbol (scanner, SESSION_INFO_DOCKABLE, "tab-style",
535
532
GINT_TO_POINTER (SESSION_INFO_DOCKABLE_TAB_STYLE));
536
533
g_scanner_scope_add_symbol (scanner, SESSION_INFO_DOCKABLE, "preview-size",
537
GINT_TO_POINTER (SESSION_INFO_DOCKABLE_PREVIEW_SIZE));
534
GINT_TO_POINTER (SESSION_INFO_DOCKABLE_VIEW_SIZE));
538
535
g_scanner_scope_add_symbol (scanner, SESSION_INFO_DOCKABLE, "aux-info",
539
536
GINT_TO_POINTER (SESSION_INFO_DOCKABLE_AUX));
732
729
gimp_dialog_factory_dialog_new (factory, screen,
733
730
info->toplevel_entry->identifier,
734
info->toplevel_entry->preview_size,
731
info->toplevel_entry->view_size,
737
734
if (dialog && info->aux_info)
764
761
GimpSessionInfoDockable *dockable_info = pages->data;
765
762
GtkWidget *dockable;
767
if (dockable_info->preview_size < GIMP_VIEW_SIZE_TINY ||
768
dockable_info->preview_size > GIMP_VIEW_SIZE_GIGANTIC)
769
dockable_info->preview_size = -1;
764
if (dockable_info->view_size < GIMP_VIEW_SIZE_TINY ||
765
dockable_info->view_size > GIMP_VIEW_SIZE_GIGANTIC)
766
dockable_info->view_size = -1;
771
768
/* use the new dock's dialog factory to create dockables
772
769
* because it may be different from the dialog factory
776
773
gimp_dialog_factory_dockable_new (dock->dialog_factory,
778
775
dockable_info->identifier,
779
dockable_info->preview_size);
776
dockable_info->view_size);
791
788
GIMP_DOCKABLE (dockable), -1);
794
if ((book_info->current_page > 0) &&
795
(book_info->current_page <
796
gtk_notebook_get_n_pages (GTK_NOTEBOOK (dockbook))))
791
if (book_info->current_page <
792
gtk_notebook_get_n_pages (GTK_NOTEBOOK (dockbook)))
798
794
gtk_notebook_set_current_page (GTK_NOTEBOOK (dockbook),
799
795
book_info->current_page);
799
gtk_notebook_set_current_page (GTK_NOTEBOOK (dockbook), 0);
803
803
for (books = info->books; books; books = g_list_next (books))
831
831
/* This function mostly lifted from
832
832
* gtk+/gdk/gdkscreen.c:gdk_screen_get_monitor_at_window()
835
get_appropriate_monitor (GdkScreen *screen,
835
get_appropriate_monitor (GdkScreen *screen,
841
gint num_monitors, i, area = 0, monitor = -1;
842
841
GdkRectangle rect;
849
852
num_monitors = gdk_screen_get_n_monitors (screen);
851
854
for (i = 0; i < num_monitors; i++)
853
GdkRectangle tmp_monitor, intersect;
855
gdk_screen_get_monitor_geometry (screen, i, &tmp_monitor);
856
gdk_rectangle_intersect (&rect, &tmp_monitor, &intersect);
858
if (intersect.width * intersect.height > area)
860
area = intersect.width * intersect.height;
856
GdkRectangle geometry;
858
gdk_screen_get_monitor_geometry (screen, i, &geometry);
860
if (gdk_rectangle_intersect (&rect, &geometry, &geometry) &&
861
geometry.width * geometry.height > area)
863
area = geometry.width * geometry.height;
864
868
if (monitor >= 0)
882
886
screen = gtk_widget_get_screen (info->widget);
884
if ((!info->toplevel_entry || info->toplevel_entry->remember_size) &&
885
info->width > 0 && info->height > 0)
888
if ((! info->toplevel_entry || info->toplevel_entry->remember_size) &&
889
(info->width > 0 && info->height > 0))
887
891
gdk_screen_get_monitor_geometry (screen,
888
892
get_appropriate_monitor (screen,
890
info->width, info->height),
892
info->x = CLAMP (info->x, monitor.x, monitor.x + monitor.width - info->width);
893
info->y = CLAMP (info->y, monitor.y, monitor.y + monitor.height - info->height);
899
info->x = CLAMP (info->x,
900
monitor.x, monitor.x + monitor.width - info->width);
901
info->y = CLAMP (info->y,
902
monitor.y, monitor.y + monitor.height - info->height);
897
906
gdk_screen_get_monitor_geometry (screen,
898
gdk_screen_get_monitor_at_point (screen, info->x, info->y),
907
gdk_screen_get_monitor_at_point (screen,
901
912
info->x = CLAMP (info->x, monitor.x, monitor.x + monitor.width - 128);
902
913
info->y = CLAMP (info->y, monitor.y, monitor.y + monitor.height - 128);
925
936
gdk_window_get_root_origin (info->widget->window, &info->x, &info->y);
927
938
if (! info->toplevel_entry || info->toplevel_entry->remember_size)
929
info->width = info->widget->allocation.width;
930
info->height = info->widget->allocation.height;
940
info->width = info->widget->allocation.width;
941
info->height = info->widget->allocation.height;
939
950
info->open = FALSE;
1147
1158
dockable->tab_style = enum_value->value;
1150
case SESSION_INFO_DOCKABLE_PREVIEW_SIZE:
1161
case SESSION_INFO_DOCKABLE_VIEW_SIZE:
1151
1162
token = G_TOKEN_INT;
1152
if (! gimp_scanner_parse_int (scanner, &dockable->preview_size))
1163
if (! gimp_scanner_parse_int (scanner, &dockable->view_size))