summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2012-04-10 19:44:38 +0200
committerGravatar waker <wakeroid@gmail.com>2012-04-10 19:44:38 +0200
commit3c495b329da0f5cf880dc4004922df9b291eea18 (patch)
treebe24aa918f0ae5657e5e7f116917568b062140db /plugins
parenta50224a00294802a34029667bf129d3da18a6fa2 (diff)
gtkui: save/restore layout widget sizes
Diffstat (limited to 'plugins')
-rw-r--r--plugins/gtkui/gtkui.c2
-rw-r--r--plugins/gtkui/gtkui_api.h5
-rw-r--r--plugins/gtkui/widgets.c57
-rw-r--r--plugins/gtkui/widgets.h6
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);