ui/gtk/window.c

changeset 783
25b2da0aac15
parent 770
521ecd0a0e7b
child 789
d70799b3333e
equal deleted inserted replaced
782:a72d7509d292 783:25b2da0aac15
129 static gboolean close_request(GtkWidget* self, GdkEvent* event, UiObject *obj) { 129 static gboolean close_request(GtkWidget* self, GdkEvent* event, UiObject *obj) {
130 return ui_window_close_request(obj); 130 return ui_window_close_request(obj);
131 } 131 }
132 #endif 132 #endif
133 133
134 static UiObject* create_window(const char *title, void *window_data, UiBool sidebar, UiBool simple) { 134 static UiObject* create_window(const char *title, void *window_data, UiBool sidebar, UiBool splitview, UiBool simple) {
135 UiObject *obj = uic_object_new_toplevel(); 135 UiObject *obj = uic_object_new_toplevel();
136 136
137 #ifdef UI_LIBADWAITA 137 #ifdef UI_LIBADWAITA
138 obj->widget = adw_application_window_new(ui_get_application()); 138 obj->widget = adw_application_window_new(ui_get_application());
139 #elif !defined(UI_GTK2) 139 #elif !defined(UI_GTK2)
198 GtkWidget *vbox = ui_gtk_vbox_new(0); 198 GtkWidget *vbox = ui_gtk_vbox_new(0);
199 #ifdef UI_LIBADWAITA 199 #ifdef UI_LIBADWAITA
200 GtkWidget *toolbar_view = adw_toolbar_view_new(); 200 GtkWidget *toolbar_view = adw_toolbar_view_new();
201 adw_toolbar_view_set_content(ADW_TOOLBAR_VIEW(toolbar_view), vbox); 201 adw_toolbar_view_set_content(ADW_TOOLBAR_VIEW(toolbar_view), vbox);
202 202
203 GtkWidget *headerbar_sidebar = NULL;
204 GtkWidget *headerbar_main = adw_header_bar_new();
205 GtkWidget *headerbar_right = NULL;
206
207 GtkWidget *content = toolbar_view;
208 if(splitview) {
209 content = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
210
211 GtkWidget *right_panel = adw_toolbar_view_new();
212 GtkWidget *right_vbox = ui_gtk_vbox_new(0);
213 adw_toolbar_view_set_content(ADW_TOOLBAR_VIEW(right_panel), right_vbox);
214
215 headerbar_right = adw_header_bar_new();
216 adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_right), FALSE);
217 adw_toolbar_view_add_top_bar(ADW_TOOLBAR_VIEW(right_panel), headerbar_right);
218
219 adw_header_bar_set_show_end_title_buttons(ADW_HEADER_BAR(headerbar_main), FALSE);
220
221 gtk_paned_set_start_child(GTK_PANED(content), toolbar_view);
222 gtk_paned_set_end_child(GTK_PANED(content), right_panel);
223
224 g_object_set_data(G_OBJECT(obj->widget), "ui_window_splitview", content);
225 g_object_set_data(G_OBJECT(obj->widget), "ui_left_panel", vbox);
226 g_object_set_data(G_OBJECT(obj->widget), "ui_right_panel", right_vbox);
227 }
228
203 GtkWidget *content_box = ui_gtk_vbox_new(0); 229 GtkWidget *content_box = ui_gtk_vbox_new(0);
204 BOX_ADD_EXPAND(GTK_BOX(vbox), content_box); 230 BOX_ADD_EXPAND(GTK_BOX(vbox), content_box);
205 231
206 GtkWidget *sidebar_headerbar = NULL;
207 if(sidebar) { 232 if(sidebar) {
208 GtkWidget *splitview = adw_overlay_split_view_new(); 233 GtkWidget *splitview = adw_overlay_split_view_new();
209 adw_application_window_set_content(ADW_APPLICATION_WINDOW(obj->widget), splitview); 234 adw_application_window_set_content(ADW_APPLICATION_WINDOW(obj->widget), splitview);
210 235
211 GtkWidget *sidebar_toolbar_view = adw_toolbar_view_new(); 236 GtkWidget *sidebar_toolbar_view = adw_toolbar_view_new();
212 adw_overlay_split_view_set_sidebar(ADW_OVERLAY_SPLIT_VIEW(splitview), sidebar_toolbar_view); 237 adw_overlay_split_view_set_sidebar(ADW_OVERLAY_SPLIT_VIEW(splitview), sidebar_toolbar_view);
213 sidebar_headerbar = adw_header_bar_new(); 238 headerbar_sidebar = adw_header_bar_new();
214 adw_toolbar_view_add_top_bar(ADW_TOOLBAR_VIEW(sidebar_toolbar_view), sidebar_headerbar); 239 adw_toolbar_view_add_top_bar(ADW_TOOLBAR_VIEW(sidebar_toolbar_view), headerbar_sidebar);
215 240
216 adw_overlay_split_view_set_content(ADW_OVERLAY_SPLIT_VIEW(splitview), toolbar_view); 241 adw_overlay_split_view_set_content(ADW_OVERLAY_SPLIT_VIEW(splitview), content);
217 242
218 g_object_set_data(G_OBJECT(obj->widget), "ui_sidebar", sidebar_toolbar_view); 243 g_object_set_data(G_OBJECT(obj->widget), "ui_sidebar", sidebar_toolbar_view);
219 } else { 244 } else {
220 adw_application_window_set_content(ADW_APPLICATION_WINDOW(obj->widget), toolbar_view); 245 adw_application_window_set_content(ADW_APPLICATION_WINDOW(obj->widget), content);
221 } 246 }
222
223 GtkWidget *headerbar = adw_header_bar_new();
224 247
225 const char *show_title = ui_get_property("ui.gtk.window.showtitle"); 248 const char *show_title = ui_get_property("ui.gtk.window.showtitle");
226 if(show_title) { 249 if(show_title) {
227 if(!strcmp(show_title, "main") && sidebar) { 250 if(!strcmp(show_title, "main") && sidebar) {
228 adw_header_bar_set_show_title(ADW_HEADER_BAR(sidebar_headerbar), FALSE); 251 adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_sidebar), FALSE);
229 } else if(!strcmp(show_title, "sidebar")) { 252 } else if(!strcmp(show_title, "sidebar")) {
230 adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar), FALSE); 253 adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_main), FALSE);
231 } else if(!strcmp(show_title, "false")) { 254 } else if(!strcmp(show_title, "false")) {
232 adw_header_bar_set_show_title(ADW_HEADER_BAR(sidebar_headerbar), FALSE); 255 adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_sidebar), FALSE);
233 adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar), FALSE); 256 adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_main), FALSE);
234 } else { 257 } else {
235 fprintf(stderr, "Unknown value '%s' for property ui.gtk.window.showtitle\n", show_title); 258 fprintf(stderr, "Unknown value '%s' for property ui.gtk.window.showtitle\n", show_title);
236 adw_header_bar_set_show_title(ADW_HEADER_BAR(sidebar_headerbar), FALSE); 259 adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_sidebar), FALSE);
237 } 260 }
238 } else { 261 } else {
239 adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar), FALSE); 262 adw_header_bar_set_show_title(ADW_HEADER_BAR(headerbar_main), FALSE);
240 } 263 }
241 264
242 adw_toolbar_view_add_top_bar(ADW_TOOLBAR_VIEW(toolbar_view), headerbar); 265 adw_toolbar_view_add_top_bar(ADW_TOOLBAR_VIEW(toolbar_view), headerbar_main);
243 g_object_set_data(G_OBJECT(obj->widget), "ui_headerbar", headerbar); 266 g_object_set_data(G_OBJECT(obj->widget), "ui_headerbar", headerbar_main);
244 267
245 if(!simple) { 268 if(!simple) {
246 ui_fill_headerbar(obj, headerbar); 269 ui_fill_headerbar(obj, headerbar_main);
247 } 270 }
248 #elif GTK_MAJOR_VERSION >= 4 271 #elif GTK_MAJOR_VERSION >= 4
249 GtkWidget *content_box = ui_gtk_vbox_new(0); 272 GtkWidget *content_box = ui_gtk_vbox_new(0);
250 WINDOW_SET_CONTENT(obj->widget, vbox); 273 WINDOW_SET_CONTENT(obj->widget, vbox);
251 if(!simple) { 274 if(!simple) {
323 return obj; 346 return obj;
324 } 347 }
325 348
326 349
327 UiObject* ui_window(const char *title, void *window_data) { 350 UiObject* ui_window(const char *title, void *window_data) {
328 return create_window(title, window_data, FALSE, FALSE); 351 return create_window(title, window_data, FALSE, FALSE, FALSE);
329 } 352 }
330 353
331 UiObject *ui_sidebar_window(const char *title, void *window_data) { 354 UiObject *ui_sidebar_window(const char *title, void *window_data) {
332 return create_window(title, window_data, TRUE, FALSE); 355 return create_window(title, window_data, TRUE, FALSE, FALSE);
356 }
357
358 UIEXPORT UiObject *ui_splitview_window(const char *title, UiBool sidebar) {
359 return create_window(title, NULL, sidebar, TRUE, FALSE);
333 } 360 }
334 361
335 UiObject* ui_simple_window(const char *title, void *window_data) { 362 UiObject* ui_simple_window(const char *title, void *window_data) {
336 return create_window(title, window_data, FALSE, TRUE); 363 return create_window(title, window_data, FALSE, FALSE, TRUE);
337 } 364 }
338 365
339 void ui_window_size(UiObject *obj, int width, int height) { 366 void ui_window_size(UiObject *obj, int width, int height) {
340 gtk_window_set_default_size( 367 gtk_window_set_default_size(
341 GTK_WINDOW(obj->widget), 368 GTK_WINDOW(obj->widget),

mercurial