| 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) { |