Commit da9a427b7c7950f66d8c10af2e14c4d6a4585512
1 parent
ea07200f
Exists in
master
and in
4 other branches
Creating gsettings path for window state and saving size and state to
it.
Showing
7 changed files
with
339 additions
and
122 deletions
Show diff stats
Makefile.in
| ... | ... | @@ -44,6 +44,10 @@ SOURCES= \ |
| 44 | 44 | $(wildcard src/main/@OSNAME@/*.c) \ |
| 45 | 45 | $(wildcard src/main/@OSNAME@/*.rc) |
| 46 | 46 | |
| 47 | +SCHEMAS= \ | |
| 48 | + $(wildcard schemas/@OSNAME@/*.gschema.xml) \ | |
| 49 | + $(wildcard schemas/common/*.gschema.xml) | |
| 50 | + | |
| 47 | 51 | #---[ Tools ]---------------------------------------------------------------------------- |
| 48 | 52 | |
| 49 | 53 | CC=@CC@ |
| ... | ... | @@ -75,6 +79,7 @@ sysconfdir=@sysconfdir@ |
| 75 | 79 | BASEDIR=@BASEDIR@ |
| 76 | 80 | |
| 77 | 81 | POTDIR=$(BASEDIR)/.pot |
| 82 | +POTDIR=$(BASEDIR)/.schemas | |
| 78 | 83 | |
| 79 | 84 | OBJDIR=$(BASEDIR)/.obj/$(PACKAGE_NAME) |
| 80 | 85 | OBJDBG=$(OBJDIR)/Debug |
| ... | ... | @@ -134,11 +139,11 @@ $(OBJDBG)/%.o: \ |
| 134 | 139 | @$(WINDRES) $< -O coff -o $@ |
| 135 | 140 | |
| 136 | 141 | gschemas.compiled: \ |
| 137 | - schemas/@OSNAME@/*.gschema.xml | |
| 142 | + $(foreach SCHEMA, $(notdir $(SCHEMAS)), $(OBJDIR)/schemas/$(SCHEMA)) | |
| 138 | 143 | |
| 139 | 144 | @glib-compile-schemas \ |
| 140 | 145 | --targetdir=$(@D) \ |
| 141 | - $(BASEDIR)/schemas/@OSNAME@ | |
| 146 | + $(OBJDIR)/schemas | |
| 142 | 147 | |
| 143 | 148 | #---[ Release Rules ]-------------------------------------------------------------------- |
| 144 | 149 | |
| ... | ... | @@ -184,6 +189,18 @@ $(POTDIR)/$(PACKAGE_NAME)/%.pot: \ |
| 184 | 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 | 204 | install-%: \ |
| 188 | 205 | %/Makefile |
| 189 | 206 | |
| ... | ... | @@ -299,12 +316,14 @@ clean: \ |
| 299 | 316 | cleanDebug: |
| 300 | 317 | |
| 301 | 318 | @rm -fr $(OBJDBG) |
| 319 | + @rm -fr $(OBJDIR)/schemas | |
| 302 | 320 | @rm -fr $(BINDBG) |
| 303 | 321 | @rm -f gschemas.compiled |
| 304 | 322 | |
| 305 | 323 | cleanRelease: |
| 306 | 324 | |
| 307 | 325 | @rm -fr $(OBJRLS) |
| 326 | + @rm -fr $(OBJDIR)/schemas | |
| 308 | 327 | @rm -fr $(BINRLS) |
| 309 | 328 | @rm -fr $(POTDIR) |
| 310 | 329 | ... | ... |
configure.ac
schemas/Makefile.in
| ... | ... | @@ -55,6 +55,10 @@ install: |
| 55 | 55 | @$(MKDIR) $(DESTDIR)/$(schemadir) |
| 56 | 56 | @$(INSTALL_DATA) \ |
| 57 | 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 | ... | ... |
| ... | ... | @@ -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 | 38 | <description>The ID of the current user interface style</description> |
| 39 | 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 | 41 | </schema> |
| 84 | 42 | |
| 85 | 43 | </schemalist> | ... | ... |
src/objects/window/private.h
| ... | ... | @@ -65,6 +65,13 @@ |
| 65 | 65 | GtkNotebook * notebook; |
| 66 | 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 | 75 | GtkWidget * popups[PW3270_APP_WINDOW_POPUP_COUNT]; |
| 69 | 76 | |
| 70 | 77 | }; | ... | ... |
src/objects/window/window.c
| ... | ... | @@ -35,6 +35,7 @@ |
| 35 | 35 | |
| 36 | 36 | static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); |
| 37 | 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 | 40 | G_DEFINE_TYPE(pw3270ApplicationWindow, pw3270ApplicationWindow, GTK_TYPE_APPLICATION_WINDOW); |
| 40 | 41 | |
| ... | ... | @@ -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 | 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 | 181 | |
| 105 | 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 | 191 | GtkBox * vBox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,0)); |
| 108 | 192 | |
| 109 | 193 | widget->notebook = GTK_NOTEBOOK(gtk_notebook_new()); |
| ... | ... | @@ -224,8 +308,6 @@ |
| 224 | 308 | |
| 225 | 309 | size_t ix; |
| 226 | 310 | |
| 227 | - g_autoptr(GSettings) settings = pw3270_application_get_settings(G_APPLICATION(application)); | |
| 228 | - | |
| 229 | 311 | g_return_val_if_fail(GTK_IS_APPLICATION(application), NULL); |
| 230 | 312 | pw3270ApplicationWindow * window = |
| 231 | 313 | g_object_new( |
| ... | ... | @@ -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 | 382 | g_settings_bind( |
| 272 | 383 | settings, |
| 273 | - "has-subtitle", | |
| 274 | - header, | |
| 275 | - "has-subtitle", | |
| 384 | + "menubar-visible", | |
| 385 | + window, | |
| 386 | + "show-menubar", | |
| 276 | 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 | 398 | g_settings_bind( |
| 286 | 399 | settings, |
| 287 | - "header-action-names", | |
| 288 | - window, | |
| 400 | + "toolbar-action-names", | |
| 401 | + window->toolbar, | |
| 289 | 402 | "action-names", |
| 290 | 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 | 424 | // Setup default position and size |
| 342 | 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 | 427 | // Create terminal widget |
| 346 | 428 | GtkWidget * terminal = pw3270_application_window_new_tab(GTK_WIDGET(window), session_file); |
| ... | ... | @@ -456,3 +538,45 @@ |
| 456 | 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 | + | ... | ... |