ui/gtk/window.c

changeset 790
67da3f795226
parent 789
d70799b3333e
child 794
ebd7b3394501
equal deleted inserted replaced
789:d70799b3333e 790:67da3f795226
47 static int nwindows = 0; 47 static int nwindows = 0;
48 48
49 static int window_default_width = 650; 49 static int window_default_width = 650;
50 static int window_default_height = 550; 50 static int window_default_height = 550;
51 51
52 static int splitview_window_default_pos = -1;
53 static UiBool splitview_window_use_prop = TRUE;
54
52 static gboolean ui_window_destroy(void *data) { 55 static gboolean ui_window_destroy(void *data) {
53 UiObject *obj = data; 56 UiObject *obj = data;
54 uic_object_destroy(obj); 57 uic_object_destroy(obj);
55 58
56 nwindows--; 59 nwindows--;
128 #else 131 #else
129 static gboolean close_request(GtkWidget* self, GdkEvent* event, UiObject *obj) { 132 static gboolean close_request(GtkWidget* self, GdkEvent* event, UiObject *obj) {
130 return ui_window_close_request(obj); 133 return ui_window_close_request(obj);
131 } 134 }
132 #endif 135 #endif
136
137 static void save_window_splitview_pos(GtkWidget *widget, void *unused) {
138 int pos = gtk_paned_get_position(GTK_PANED(widget));
139 char buf[32];
140 snprintf(buf, 32, "%d", pos);
141 ui_set_property("ui.window.splitview.pos", buf);
142 }
133 143
134 static UiObject* create_window(const char *title, void *window_data, UiBool sidebar, UiBool splitview, UiBool simple) { 144 static UiObject* create_window(const char *title, void *window_data, UiBool sidebar, UiBool splitview, UiBool simple) {
135 UiObject *obj = uic_object_new_toplevel(); 145 UiObject *obj = uic_object_new_toplevel();
136 146
137 #ifdef UI_LIBADWAITA 147 #ifdef UI_LIBADWAITA
205 GtkWidget *headerbar_right = NULL; 215 GtkWidget *headerbar_right = NULL;
206 216
207 GtkWidget *content = toolbar_view; 217 GtkWidget *content = toolbar_view;
208 if(splitview) { 218 if(splitview) {
209 content = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL); 219 content = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
220 g_signal_connect(
221 content,
222 "destroy",
223 G_CALLBACK(save_window_splitview_pos),
224 NULL);
225
226 const char *splitview_pos_str = ui_get_property("ui.window.splitview.pos");
227 int pos = splitview_window_default_pos;
228 if(pos < 0) {
229 pos = window_width / 2;
230 }
231 if(splitview_pos_str && splitview_window_use_prop) {
232 int splitview_pos = atoi(splitview_pos_str);
233 if(splitview_pos > 0) {
234 pos = splitview_pos;
235 }
236 }
237 gtk_paned_set_position(GTK_PANED(content), pos);
210 238
211 GtkWidget *right_panel = adw_toolbar_view_new(); 239 GtkWidget *right_panel = adw_toolbar_view_new();
212 GtkWidget *right_vbox = ui_gtk_vbox_new(0); 240 GtkWidget *right_vbox = ui_gtk_vbox_new(0);
213 adw_toolbar_view_set_content(ADW_TOOLBAR_VIEW(right_panel), right_vbox); 241 adw_toolbar_view_set_content(ADW_TOOLBAR_VIEW(right_panel), right_vbox);
214 242
373 GTK_WINDOW(obj->widget), 401 GTK_WINDOW(obj->widget),
374 width, 402 width,
375 height); 403 height);
376 } 404 }
377 405
378 void ui_window_default_size(UiObject *obj, int width, int height) { 406 void ui_window_default_size(int width, int height) {
379 window_default_width = width; 407 window_default_width = width;
380 window_default_height = height; 408 window_default_height = height;
409 }
410
411 void ui_splitview_window_set_pos(UiObject *obj, int pos) {
412 GtkWidget *splitview = g_object_get_data(G_OBJECT(obj->widget), "ui_window_splitview");
413 if(splitview) {
414 gtk_paned_set_position(GTK_PANED(splitview), pos);
415 } else {
416 fprintf(stderr, "Error: window has no splitview\n");
417 }
418 }
419
420 int ui_splitview_window_get_pos(UiObject *obj) {
421 GtkWidget *splitview = g_object_get_data(G_OBJECT(obj->widget), "ui_window_splitview");
422 if(splitview) {
423 return gtk_paned_get_position(GTK_PANED(splitview));
424 } else {
425 fprintf(stderr, "Error: window has no splitview\n");
426 }
427 return 0;
428 }
429
430 void ui_splitview_window_set_default_pos(int pos) {
431 splitview_window_default_pos = pos;
432 }
433
434 void ui_splitview_window_use_property(UiBool enable) {
435 splitview_window_use_prop = enable;
381 } 436 }
382 437
383 #ifdef UI_LIBADWAITA 438 #ifdef UI_LIBADWAITA
384 439
385 static void dialog_response(AdwAlertDialog *self, gchar *response, UiEventData *data) { 440 static void dialog_response(AdwAlertDialog *self, gchar *response, UiEventData *data) {

mercurial