Commit da9a427b7c7950f66d8c10af2e14c4d6a4585512

Authored by Perry Werneck
1 parent ea07200f

Creating gsettings path for window state and saving size and state to

it.
@@ -44,6 +44,10 @@ SOURCES= \ @@ -44,6 +44,10 @@ SOURCES= \
44 $(wildcard src/main/@OSNAME@/*.c) \ 44 $(wildcard src/main/@OSNAME@/*.c) \
45 $(wildcard src/main/@OSNAME@/*.rc) 45 $(wildcard src/main/@OSNAME@/*.rc)
46 46
  47 +SCHEMAS= \
  48 + $(wildcard schemas/@OSNAME@/*.gschema.xml) \
  49 + $(wildcard schemas/common/*.gschema.xml)
  50 +
47 #---[ Tools ]---------------------------------------------------------------------------- 51 #---[ Tools ]----------------------------------------------------------------------------
48 52
49 CC=@CC@ 53 CC=@CC@
@@ -75,6 +79,7 @@ sysconfdir=@sysconfdir@ @@ -75,6 +79,7 @@ sysconfdir=@sysconfdir@
75 BASEDIR=@BASEDIR@ 79 BASEDIR=@BASEDIR@
76 80
77 POTDIR=$(BASEDIR)/.pot 81 POTDIR=$(BASEDIR)/.pot
  82 +POTDIR=$(BASEDIR)/.schemas
78 83
79 OBJDIR=$(BASEDIR)/.obj/$(PACKAGE_NAME) 84 OBJDIR=$(BASEDIR)/.obj/$(PACKAGE_NAME)
80 OBJDBG=$(OBJDIR)/Debug 85 OBJDBG=$(OBJDIR)/Debug
@@ -134,11 +139,11 @@ $(OBJDBG)/%.o: \ @@ -134,11 +139,11 @@ $(OBJDBG)/%.o: \
134 @$(WINDRES) $< -O coff -o $@ 139 @$(WINDRES) $< -O coff -o $@
135 140
136 gschemas.compiled: \ 141 gschemas.compiled: \
137 - schemas/@OSNAME@/*.gschema.xml 142 + $(foreach SCHEMA, $(notdir $(SCHEMAS)), $(OBJDIR)/schemas/$(SCHEMA))
138 143
139 @glib-compile-schemas \ 144 @glib-compile-schemas \
140 --targetdir=$(@D) \ 145 --targetdir=$(@D) \
141 - $(BASEDIR)/schemas/@OSNAME@ 146 + $(OBJDIR)/schemas
142 147
143 #---[ Release Rules ]-------------------------------------------------------------------- 148 #---[ Release Rules ]--------------------------------------------------------------------
144 149
@@ -184,6 +189,18 @@ $(POTDIR)/$(PACKAGE_NAME)/%.pot: \ @@ -184,6 +189,18 @@ $(POTDIR)/$(PACKAGE_NAME)/%.pot: \
184 @touch $@ 189 @touch $@
185 190
186 191
  192 +$(OBJDIR)/schemas/%.xml:\
  193 + schemas/@OSNAME@/%.xml
  194 +
  195 + @$(MKDIR) $(@D)
  196 + @cp "$^" "$@"
  197 +
  198 +$(OBJDIR)/schemas/%.xml:\
  199 + schemas/common/%.xml
  200 +
  201 + @$(MKDIR) $(@D)
  202 + @cp "$^" "$@"
  203 +
187 install-%: \ 204 install-%: \
188 %/Makefile 205 %/Makefile
189 206
@@ -299,12 +316,14 @@ clean: \ @@ -299,12 +316,14 @@ clean: \
299 cleanDebug: 316 cleanDebug:
300 317
301 @rm -fr $(OBJDBG) 318 @rm -fr $(OBJDBG)
  319 + @rm -fr $(OBJDIR)/schemas
302 @rm -fr $(BINDBG) 320 @rm -fr $(BINDBG)
303 @rm -f gschemas.compiled 321 @rm -f gschemas.compiled
304 322
305 cleanRelease: 323 cleanRelease:
306 324
307 @rm -fr $(OBJRLS) 325 @rm -fr $(OBJRLS)
  326 + @rm -fr $(OBJDIR)/schemas
308 @rm -fr $(BINRLS) 327 @rm -fr $(BINRLS)
309 @rm -fr $(POTDIR) 328 @rm -fr $(POTDIR)
310 329
@@ -97,6 +97,8 @@ dnl INSTALL_PACKAGES=&quot;linux-lib ${INSTALL_PACKAGES}&quot; @@ -97,6 +97,8 @@ dnl INSTALL_PACKAGES=&quot;linux-lib ${INSTALL_PACKAGES}&quot;
97 97
98 esac 98 esac
99 99
  100 +AC_CONFIG_FILES(schemas/common/window.gschema.xml)
  101 +
100 AC_SUBST(OSNAME,$app_cv_osname) 102 AC_SUBST(OSNAME,$app_cv_osname)
101 AC_SUBST(LIBS) 103 AC_SUBST(LIBS)
102 AC_SUBST(LOGDIR) 104 AC_SUBST(LOGDIR)
schemas/Makefile.in
@@ -55,6 +55,10 @@ install: @@ -55,6 +55,10 @@ install:
55 @$(MKDIR) $(DESTDIR)/$(schemadir) 55 @$(MKDIR) $(DESTDIR)/$(schemadir)
56 @$(INSTALL_DATA) \ 56 @$(INSTALL_DATA) \
57 $(BASEDIR)/schemas/@OSNAME@/application.gschema.xml \ 57 $(BASEDIR)/schemas/@OSNAME@/application.gschema.xml \
58 - $(DESTDIR)/$(schemadir)/$(PRODUCT_NAME).gschema.xml 58 + $(DESTDIR)/$(schemadir)/$(PRODUCT_NAME)-application.gschema.xml
  59 +
  60 + @$(INSTALL_DATA) \
  61 + $(BASEDIR)/schemas/common/window.gschema.xml \
  62 + $(DESTDIR)/$(schemadir)/$(PRODUCT_NAME)-window.gschema.xml
59 63
60 64
schemas/common/window.gschema.xml.in 0 → 100644
@@ -0,0 +1,103 @@ @@ -0,0 +1,103 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!--
  3 +
  4 + Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  5 + (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  6 + aplicativos mainframe. Registro no INPI sob o nome G3270.
  7 +
  8 + Copyright (C) <2008> <Banco do Brasil S.A.>
  9 +
  10 + Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  11 + os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  12 + Free Software Foundation.
  13 +
  14 + Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  15 + GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  16 + A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  17 + obter mais detalhes.
  18 +
  19 + Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  20 + programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  21 + St, Fifth Floor, Boston, MA 02110-1301 USA
  22 +
  23 +
  24 + Contatos:
  25 +
  26 + perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  27 + erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  28 +
  29 +-->
  30 +
  31 +<schemalist>
  32 +
  33 + <schema id="br.com.bb.@PACKAGE_NAME@.window">
  34 +
  35 + <key name="width" type="i">
  36 + <default>-1</default>
  37 + <summary>The window width.</summary>
  38 + <description></description>
  39 + </key>
  40 +
  41 + <key name="height" type="i">
  42 + <default>-1</default>
  43 + <summary>The window height.</summary>
  44 + <description></description>
  45 + </key>
  46 +
  47 + <key name="is-maximized" type="b">
  48 + <default>false</default>
  49 + <summary>Is the window maximized?</summary>
  50 + <description></description>
  51 + </key>
  52 +
  53 + <key name="is-fullscreen" type="b">
  54 + <default>false</default>
  55 + <summary>Is the window in full screen mode?</summary>
  56 + <description></description>
  57 + </key>
  58 +
  59 + <key name="has-subtitle" type="b">
  60 + <default>true</default>
  61 + <summary>Enable top window subtitle</summary>
  62 + <description>If TRUE, reserve space for a subtitle, even if none is currently set.</description>
  63 + </key>
  64 +
  65 + <key name="toolbar-visible" type="b">
  66 + <default>true</default>
  67 + <summary>The toolbar visible state</summary>
  68 + <description></description>
  69 + </key>
  70 +
  71 + <key name="menubar-visible" type="b">
  72 + <default>true</default>
  73 + <summary>The menubar visible state</summary>
  74 + <description></description>
  75 + </key>
  76 +
  77 + <key name="toolbar-style" type="i">
  78 + <default>-1</default>
  79 + <summary>How to draw the toolbar.</summary>
  80 + <description></description>
  81 + </key>
  82 +
  83 + <key name="toolbar-icon-size" type="i">
  84 + <default>0</default>
  85 + <summary>The size of the icons in a toolbar</summary>
  86 + <description></description>
  87 + </key>
  88 +
  89 + <key name="toolbar-action-names" type="s">
  90 + <default>'win.copy,win.paste,win.select-all,separator,win.connect,win.disconnect,separator,win.session.properties,win.file.transfer,win.print,win.close'</default>
  91 + <summary>The toolbar action list</summary>
  92 + <description></description>
  93 + </key>
  94 +
  95 + <key name="header-action-names" type="s">
  96 + <default>'win.disconnect,win.reconnect,win.file.transfer,win.print:menu.open-menu'</default>
  97 + <summary>The actions in the header bar</summary>
  98 + <description></description>
  99 + </key>
  100 +
  101 + </schema>
  102 +
  103 +</schemalist>
schemas/linux/application.gschema.xml.in
@@ -38,48 +38,6 @@ @@ -38,48 +38,6 @@
38 <description>The ID of the current user interface style</description> 38 <description>The ID of the current user interface style</description>
39 </key> 39 </key>
40 40
41 - <key name="has-subtitle" type="b">  
42 - <default>true</default>  
43 - <summary>Enable top window subtitle</summary>  
44 - <description>If TRUE, reserve space for a subtitle, even if none is currently set.</description>  
45 - </key>  
46 -  
47 - <key name="toolbar-style" type="i">  
48 - <default>-1</default>  
49 - <summary>How to draw the toolbar.</summary>  
50 - <description></description>  
51 - </key>  
52 -  
53 - <key name="toolbar-icon-size" type="i">  
54 - <default>0</default>  
55 - <summary>The size of the icons in a toolbar</summary>  
56 - <description></description>  
57 - </key>  
58 -  
59 - <key name="toolbar-visible" type="b">  
60 - <default>true</default>  
61 - <summary>The toolbar visible state</summary>  
62 - <description></description>  
63 - </key>  
64 -  
65 - <key name="menubar-visible" type="b">  
66 - <default>true</default>  
67 - <summary>The menubar visible state</summary>  
68 - <description></description>  
69 - </key>  
70 -  
71 - <key name="toolbar-action-names" type="s">  
72 - <default>'win.copy,win.paste,win.select-all,separator,win.connect,win.disconnect,separator,win.session.properties,win.file.transfer,win.print,app.quit'</default>  
73 - <summary>The toolbar action list</summary>  
74 - <description></description>  
75 - </key>  
76 -  
77 - <key name="header-action-names" type="s">  
78 - <default>'win.disconnect,win.reconnect,win.file.transfer,win.print:menu.open-menu'</default>  
79 - <summary>The actions in the header bar</summary>  
80 - <description></description>  
81 - </key>  
82 -  
83 </schema> 41 </schema>
84 42
85 </schemalist> 43 </schemalist>
src/objects/window/private.h
@@ -65,6 +65,13 @@ @@ -65,6 +65,13 @@
65 GtkNotebook * notebook; 65 GtkNotebook * notebook;
66 GtkToolbar * toolbar; 66 GtkToolbar * toolbar;
67 67
  68 + struct {
  69 + int width; ///< @brief Window width.
  70 + int height; ///< @brief Window height.
  71 + int is_maximized : 1; ///< @brief Non zero if window is maximized.
  72 + int is_fullscreen : 1; ///< @brief Non zero if window is fullscreen.
  73 + } state;
  74 +
68 GtkWidget * popups[PW3270_APP_WINDOW_POPUP_COUNT]; 75 GtkWidget * popups[PW3270_APP_WINDOW_POPUP_COUNT];
69 76
70 }; 77 };
src/objects/window/window.c
@@ -35,6 +35,7 @@ @@ -35,6 +35,7 @@
35 35
36 static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); 36 static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
37 static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); 37 static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
  38 + static GSettings *pw3270_application_window_settings_new(void);
38 39
39 G_DEFINE_TYPE(pw3270ApplicationWindow, pw3270ApplicationWindow, GTK_TYPE_APPLICATION_WINDOW); 40 G_DEFINE_TYPE(pw3270ApplicationWindow, pw3270ApplicationWindow, GTK_TYPE_APPLICATION_WINDOW);
40 41
@@ -60,29 +61,105 @@ @@ -60,29 +61,105 @@
60 } 61 }
61 } 62 }
62 63
  64 + {
  65 + g_autoptr(GSettings) settings = pw3270_application_window_settings_new();
  66 +
  67 + g_settings_set_int(settings, "width", window->state.width);
  68 + g_settings_set_int(settings, "height", window->state.height);
  69 + g_settings_set_boolean(settings, "is-maximized", window->state.is_maximized);
  70 + g_settings_set_boolean(settings, "is-fullscreen", window->state.is_fullscreen);
  71 + }
  72 +
63 GTK_WIDGET_CLASS(pw3270ApplicationWindow_parent_class)->destroy(widget); 73 GTK_WIDGET_CLASS(pw3270ApplicationWindow_parent_class)->destroy(widget);
64 74
65 } 75 }
66 76
67 - static void pw3270ApplicationWindow_class_init(pw3270ApplicationWindowClass *klass) { 77 + static void size_allocate(GtkWidget *widget, GtkAllocation *allocation) {
  78 +
  79 + // https://developer.gnome.org/SaveWindowState/
  80 + GTK_WIDGET_CLASS(pw3270ApplicationWindow_parent_class)->size_allocate(widget, allocation);
68 81
69 - GTK_WIDGET_CLASS(klass)->destroy = destroy; 82 + pw3270ApplicationWindow * window = PW3270_APPLICATION_WINDOW(widget);
  83 +
  84 + if(!(window->state.is_maximized || window->state.is_fullscreen)) {
  85 + gtk_window_get_size(GTK_WINDOW (widget), &window->state.width, &window->state.height);
  86 + }
70 87
71 - GObjectClass *object_class = G_OBJECT_CLASS(klass); 88 + }
72 89
73 - object_class->set_property = set_property;  
74 - object_class->get_property = get_property; 90 + static gboolean window_state_event(GtkWidget *widget, GdkEventWindowState *event) {
75 91
76 - g_object_class_install_property(  
77 - object_class,  
78 - PROP_ACTION_NAMES,  
79 - g_param_spec_string ("action-names",  
80 - N_("Action Names"),  
81 - N_("The name of the actions in the header bar"),  
82 - NULL,  
83 - G_PARAM_WRITABLE|G_PARAM_READABLE)  
84 - ); 92 + // https://developer.gnome.org/SaveWindowState/
  93 + gboolean res = GDK_EVENT_PROPAGATE;
85 94
  95 + if(GTK_WIDGET_CLASS(pw3270ApplicationWindow_parent_class)->window_state_event != NULL) {
  96 + res = GTK_WIDGET_CLASS(pw3270ApplicationWindow_parent_class)->window_state_event(widget, event);
  97 + }
  98 +
  99 + {
  100 + pw3270ApplicationWindow * window = PW3270_APPLICATION_WINDOW(widget);
  101 +
  102 + window->state.is_maximized = (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) == 0 ? 0 : 1;
  103 + window->state.is_fullscreen = (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) == 0 ? 0 : 1;
  104 + }
  105 +
  106 + return res;
  107 + }
  108 +
  109 + static void constructed(GObject *object) {
  110 +
  111 + // https://developer.gnome.org/SaveWindowState/
  112 +
  113 + pw3270ApplicationWindow * window = PW3270_APPLICATION_WINDOW(object);
  114 +
  115 + g_autoptr(GSettings) settings = pw3270_application_window_settings_new();
  116 + if(settings) {
  117 +
  118 + // https://developer.gnome.org/SaveWindowState/
  119 + window->state.width = g_settings_get_int (settings, "width");
  120 + window->state.height = g_settings_get_int (settings, "height");
  121 + window->state.is_maximized = g_settings_get_boolean (settings, "is-maximized") ? 1 : 0;
  122 + window->state.is_fullscreen = g_settings_get_boolean (settings, "is-fullscreen") ? 1 : 0;
  123 +
  124 + }
  125 +
  126 + gtk_window_set_default_size(GTK_WINDOW (object), window->state.width, window->state.height);
  127 +
  128 + if(window->state.is_maximized)
  129 + gtk_window_maximize(GTK_WINDOW(object));
  130 +
  131 + if(window->state.is_fullscreen)
  132 + gtk_window_fullscreen(GTK_WINDOW (object));
  133 +
  134 + G_OBJECT_CLASS (pw3270ApplicationWindow_parent_class)->constructed (object);
  135 + }
  136 +
  137 + static void pw3270ApplicationWindow_class_init(pw3270ApplicationWindowClass *klass) {
  138 +
  139 + {
  140 + GtkWidgetClass *widget = GTK_WIDGET_CLASS(klass);
  141 + widget->destroy = destroy;
  142 + widget->window_state_event = window_state_event;
  143 + widget->size_allocate = size_allocate;
  144 + }
  145 +
  146 + {
  147 + GObjectClass *object_class = G_OBJECT_CLASS(klass);
  148 +
  149 + object_class->set_property = set_property;
  150 + object_class->get_property = get_property;
  151 + object_class->constructed = constructed;
  152 +
  153 + g_object_class_install_property(
  154 + object_class,
  155 + PROP_ACTION_NAMES,
  156 + g_param_spec_string ("action-names",
  157 + N_("Action Names"),
  158 + N_("The name of the actions in the header bar"),
  159 + NULL,
  160 + G_PARAM_WRITABLE|G_PARAM_READABLE)
  161 + );
  162 + }
86 163
87 } 164 }
88 165
@@ -104,6 +181,13 @@ @@ -104,6 +181,13 @@
104 181
105 static void pw3270ApplicationWindow_init(pw3270ApplicationWindow *widget) { 182 static void pw3270ApplicationWindow_init(pw3270ApplicationWindow *widget) {
106 183
  184 + // Setup defaults
  185 + widget->state.width = 800;
  186 + widget->state.height = 500;
  187 + widget->state.is_maximized = 0;
  188 + widget->state.is_fullscreen = 0;
  189 +
  190 + // Create contents
107 GtkBox * vBox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,0)); 191 GtkBox * vBox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,0));
108 192
109 widget->notebook = GTK_NOTEBOOK(gtk_notebook_new()); 193 widget->notebook = GTK_NOTEBOOK(gtk_notebook_new());
@@ -224,8 +308,6 @@ @@ -224,8 +308,6 @@
224 308
225 size_t ix; 309 size_t ix;
226 310
227 - g_autoptr(GSettings) settings = pw3270_application_get_settings(G_APPLICATION(application));  
228 -  
229 g_return_val_if_fail(GTK_IS_APPLICATION(application), NULL); 311 g_return_val_if_fail(GTK_IS_APPLICATION(application), NULL);
230 pw3270ApplicationWindow * window = 312 pw3270ApplicationWindow * window =
231 g_object_new( 313 g_object_new(
@@ -259,88 +341,88 @@ @@ -259,88 +341,88 @@
259 341
260 } 342 }
261 343
262 - if(pw3270_application_get_ui_style(G_APPLICATION(application)) == PW3270_UI_STYLE_GNOME) { 344 + // Setup and show main window
  345 + {
  346 + g_autoptr(GSettings) settings = pw3270_application_window_settings_new();
  347 +
  348 + if(pw3270_application_get_ui_style(G_APPLICATION(application)) == PW3270_UI_STYLE_GNOME) {
  349 +
  350 + // Create header bar
  351 +
  352 + GtkHeaderBar * header = GTK_HEADER_BAR(gtk_header_bar_new());
  353 + gtk_window_set_titlebar(GTK_WINDOW(window), GTK_WIDGET(header));
  354 + gtk_header_bar_set_show_close_button(header,TRUE);
263 355
264 - // Create header bar 356 + gtk_header_bar_set_title(header,title);
  357 + g_settings_bind(
  358 + settings,
  359 + "has-subtitle",
  360 + header,
  361 + "has-subtitle",
  362 + G_SETTINGS_BIND_DEFAULT
  363 + );
265 364
266 - GtkHeaderBar * header = GTK_HEADER_BAR(gtk_header_bar_new());  
267 - gtk_window_set_titlebar(GTK_WINDOW(window), GTK_WIDGET(header));  
268 - gtk_header_bar_set_show_close_button(header,TRUE); 365 + // Show the new header
  366 + gtk_widget_show_all(GTK_WIDGET(header));
  367 +
  368 + g_settings_bind(
  369 + settings,
  370 + "header-action-names",
  371 + window,
  372 + "action-names",
  373 + G_SETTINGS_BIND_DEFAULT
  374 + );
  375 +
  376 + } else {
  377 +
  378 + gtk_window_set_title(GTK_WINDOW(window), title);
  379 +
  380 + }
269 381
270 - gtk_header_bar_set_title(header,title);  
271 g_settings_bind( 382 g_settings_bind(
272 settings, 383 settings,
273 - "has-subtitle",  
274 - header,  
275 - "has-subtitle", 384 + "menubar-visible",
  385 + window,
  386 + "show-menubar",
276 G_SETTINGS_BIND_DEFAULT 387 G_SETTINGS_BIND_DEFAULT
277 ); 388 );
278 389
279 - // Show the new header  
280 - gtk_widget_show_all(GTK_WIDGET(header));  
281 -  
282 - // g_autofree gchar * header_actions = g_settings_get_string(settings, "header-action-names");  
283 - // pw3270_window_set_header_action_names(GTK_WIDGET(window), header_actions); 390 + g_settings_bind(
  391 + settings,
  392 + "toolbar-visible",
  393 + window->toolbar,
  394 + "visible",
  395 + G_SETTINGS_BIND_DEFAULT
  396 + );
284 397
285 g_settings_bind( 398 g_settings_bind(
286 settings, 399 settings,
287 - "header-action-names",  
288 - window, 400 + "toolbar-action-names",
  401 + window->toolbar,
289 "action-names", 402 "action-names",
290 G_SETTINGS_BIND_DEFAULT 403 G_SETTINGS_BIND_DEFAULT
291 ); 404 );
292 405
293 - } else { 406 + g_settings_bind(
  407 + settings,
  408 + "toolbar-style",
  409 + window->toolbar,
  410 + "style",
  411 + G_SETTINGS_BIND_DEFAULT
  412 + );
294 413
295 - gtk_window_set_title(GTK_WINDOW(window), title); 414 + g_settings_bind(
  415 + settings,
  416 + "toolbar-icon-size",
  417 + window->toolbar,
  418 + "icon-size",
  419 + G_SETTINGS_BIND_DEFAULT
  420 + );
296 421
297 } 422 }
298 423
299 - // Setup and show main window  
300 - g_settings_bind(  
301 - settings,  
302 - "menubar-visible",  
303 - window,  
304 - "show-menubar",  
305 - G_SETTINGS_BIND_DEFAULT  
306 - );  
307 -  
308 - g_settings_bind(  
309 - settings,  
310 - "toolbar-visible",  
311 - window->toolbar,  
312 - "visible",  
313 - G_SETTINGS_BIND_DEFAULT  
314 - );  
315 -  
316 - g_settings_bind(  
317 - settings,  
318 - "toolbar-action-names",  
319 - window->toolbar,  
320 - "action-names",  
321 - G_SETTINGS_BIND_DEFAULT  
322 - );  
323 -  
324 - g_settings_bind(  
325 - settings,  
326 - "toolbar-style",  
327 - window->toolbar,  
328 - "style",  
329 - G_SETTINGS_BIND_DEFAULT  
330 - );  
331 -  
332 - g_settings_bind(  
333 - settings,  
334 - "toolbar-icon-size",  
335 - window->toolbar,  
336 - "icon-size",  
337 - G_SETTINGS_BIND_DEFAULT  
338 - );  
339 -  
340 -  
341 // Setup default position and size 424 // Setup default position and size
342 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); 425 gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
343 - gtk_window_set_default_size (GTK_WINDOW (window), 800, 500);  
344 426
345 // Create terminal widget 427 // Create terminal widget
346 GtkWidget * terminal = pw3270_application_window_new_tab(GTK_WIDGET(window), session_file); 428 GtkWidget * terminal = pw3270_application_window_new_tab(GTK_WIDGET(window), session_file);
@@ -456,3 +538,45 @@ @@ -456,3 +538,45 @@
456 g_strfreev(actions); 538 g_strfreev(actions);
457 539
458 } 540 }
  541 +
  542 + GSettings *pw3270_application_window_settings_new() {
  543 +
  544 + // Get settings
  545 + g_autofree gchar * path = g_strconcat("/apps/" PACKAGE_NAME "/", g_get_application_name(), "/window/",NULL);
  546 + debug("path=%s",path);
  547 +
  548 +#ifdef DEBUG
  549 +
  550 + GError * error = NULL;
  551 + GSettingsSchemaSource * source =
  552 + g_settings_schema_source_new_from_directory(
  553 + ".",
  554 + NULL,
  555 + TRUE,
  556 + &error
  557 + );
  558 +
  559 + g_assert_no_error(error);
  560 +
  561 + GSettingsSchema * schema =
  562 + g_settings_schema_source_lookup(
  563 + source,
  564 + "br.com.bb." PACKAGE_NAME ".window",
  565 + TRUE);
  566 +
  567 + debug("schema %s=%p path=%s","br.com.bb." PACKAGE_NAME ".window",schema,path);
  568 +
  569 + GSettings * settings = g_settings_new_full(schema, NULL, path);
  570 +
  571 + g_settings_schema_source_unref(source);
  572 +
  573 +#else
  574 +
  575 + GSettings * settings = g_settings_new_with_path("br.com.bb." PACKAGE_NAME, path);
  576 +
  577 +#endif // DEBUG
  578 +
  579 + return settings;
  580 +
  581 + }
  582 +