diff options
author | 2012-04-10 19:44:38 +0200 | |
---|---|---|
committer | 2012-04-10 19:44:38 +0200 | |
commit | 3c495b329da0f5cf880dc4004922df9b291eea18 (patch) | |
tree | be24aa918f0ae5657e5e7f116917568b062140db /plugins | |
parent | a50224a00294802a34029667bf129d3da18a6fa2 (diff) |
gtkui: save/restore layout widget sizes
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/gtkui/gtkui.c | 2 | ||||
-rw-r--r-- | plugins/gtkui/gtkui_api.h | 5 | ||||
-rw-r--r-- | plugins/gtkui/widgets.c | 57 | ||||
-rw-r--r-- | plugins/gtkui/widgets.h | 6 |
4 files changed, 68 insertions, 2 deletions
diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c index 77d15e1c..877e7d1f 100644 --- a/plugins/gtkui/gtkui.c +++ b/plugins/gtkui/gtkui.c @@ -1019,7 +1019,7 @@ gtkui_thread (void *ctx) { gtk_box_pack_start (GTK_BOX(lookup_widget(mainwin, "plugins_bottom_vbox")), rootwidget->widget, TRUE, TRUE, 0); // load layout - char layout[1024]; + char layout[4000]; deadbeef->conf_get_str ("gtkui.layout", "tabbed_playlist { }", layout, sizeof (layout)); ddb_gtkui_widget_t *w = NULL; diff --git a/plugins/gtkui/gtkui_api.h b/plugins/gtkui/gtkui_api.h index 34b4d9d1..672112ce 100644 --- a/plugins/gtkui/gtkui_api.h +++ b/plugins/gtkui/gtkui_api.h @@ -29,7 +29,10 @@ typedef struct ddb_gtkui_widget_s { const char *type; - + char *name; + int width; + int height; + struct ddb_gtkui_widget_s *parent; GtkWidget *widget; diff --git a/plugins/gtkui/widgets.c b/plugins/gtkui/widgets.c index dca0b915..d0ae9c73 100644 --- a/plugins/gtkui/widgets.c +++ b/plugins/gtkui/widgets.c @@ -97,6 +97,7 @@ w_init (void) { void w_free (void) { + w_save (); w_creator_t *next = NULL; for (w_creator_t *cr = w_creators; cr; cr = next) { next = cr->next; @@ -141,6 +142,14 @@ w_append (ddb_gtkui_widget_t *cont, ddb_gtkui_widget_t *child) { if (cont->append) { cont->append (cont, child); } + if (cont->type) { + if (!strcmp (cont->type, "hsplitter") && child == cont->children) { + gtk_paned_set_position (GTK_PANED(cont->widget), child->width); + } + else if (!strcmp (cont->type, "vsplitter") && child == cont->children) { + gtk_paned_set_position (GTK_PANED(cont->widget), child->height); + } + } } void @@ -190,6 +199,33 @@ w_create_from_string (const char *s, ddb_gtkui_widget_t **parent) { w_remove (w, w->children); } + // name + s = gettoken (s, t); + if (!s) { + w_destroy (w); + return NULL; + } + if (t[0]) { + w_set_name (w, t); + } + + // width + s = gettoken (s, t); + if (!s) { + w_destroy (w); + return NULL; + } + w->width = atoi (t); + + // height + s = gettoken (s, t); + if (!s) { + w_destroy (w); + return NULL; + } + w->height = atoi (t); + + // { s = gettoken (s, t); if (!s) { w_destroy (w); @@ -270,6 +306,13 @@ static char paste_buffer[1000]; static void save_widget_to_string (char *str, ddb_gtkui_widget_t *w) { strcat (str, w->type); + strcat (str, " \""); + strcat (str, w->name ? w->name : ""); + char wh[100]; + GtkAllocation a; + gtk_widget_get_allocation (w->widget, &a); + snprintf (wh, sizeof (wh), "\" %d %d ", a.width, a.height); + strcat (str, wh); strcat (str, "{"); for (ddb_gtkui_widget_t *c = w->children; c; c = c->next) { save_widget_to_string (str, c); @@ -534,6 +577,17 @@ w_create (const char *type) { } void +w_set_name (ddb_gtkui_widget_t *w, const char *name) { + if (w->name) { + free (w->name); + w->name = NULL; + } + if (name) { + w->name = strdup (name); + } +} + +void w_destroy (ddb_gtkui_widget_t *w) { if (w->destroy) { w->destroy (w); @@ -541,6 +595,9 @@ w_destroy (ddb_gtkui_widget_t *w) { if (w->widget) { gtk_widget_destroy (w->widget); } + if (w->name) { + free (w->name); + } free (w); } diff --git a/plugins/gtkui/widgets.h b/plugins/gtkui/widgets.h index 9263eb92..b22aba98 100644 --- a/plugins/gtkui/widgets.h +++ b/plugins/gtkui/widgets.h @@ -27,6 +27,9 @@ w_init (void); void w_free (void); +void +w_save (void); + ddb_gtkui_widget_t * w_get_rootwidget (void); @@ -42,6 +45,9 @@ w_unreg_widget (const char *type); ddb_gtkui_widget_t * w_create (const char *type); +void +w_set_name (ddb_gtkui_widget_t *w, const char *name); + const char * w_create_from_string (const char *s, ddb_gtkui_widget_t **parent); |