From 221329ec25e42b034a7591b98b740a287215a7be Mon Sep 17 00:00:00 2001 From: Benoit Gschwind (Noth Date: Sat, 16 Feb 2008 16:41:55 +0100 Subject: [PATCH] Fix bug that openbox don't draw title on new window --- engines/default/plugin.c | 14 +++++++++++++- engines/default/plugin.h | 4 ++++ engines/default/render.c | 2 +- openbox/client.c | 10 ++++++++-- openbox/engine_interface.h | 2 ++ 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/engines/default/plugin.c b/engines/default/plugin.c index 1f5f689..4d2e622 100644 --- a/engines/default/plugin.c +++ b/engines/default/plugin.c @@ -183,6 +183,7 @@ gpointer frame_new(struct _ObClient * client) self->rgriptop = createWindow(self->window, NULL, mask, &attrib); self->rgripbottom = createWindow(self->window, NULL, mask, &attrib); + self->stitle = g_strdup(""); self->focused = FALSE; /* the other stuff is shown based on decor settings */ @@ -252,6 +253,8 @@ void frame_free(gpointer self) XDestroyWindow(plugin.ob_display, OBDEFAULTFRAME(self)->window); if (OBDEFAULTFRAME(self)->colormap) XFreeColormap(plugin.ob_display, OBDEFAULTFRAME(self)->colormap); + + g_free(OBDEFAULTFRAME(self)->stitle); g_free(self); } @@ -1309,6 +1312,12 @@ gint frame_get_decorations(gpointer self) return OBDEFAULTFRAME(self)->decorations; } +void frame_update_title (gpointer self, const gchar * src) +{ + g_free(OBDEFAULTFRAME(self)->stitle); + OBDEFAULTFRAME(self)->stitle = g_strdup(src); +} + gboolean frame_is_visible(gpointer self) { return OBDEFAULTFRAME(self)->visible; @@ -1847,7 +1856,8 @@ ObFramePlugin plugin = { 0, //gpointer handler; "libdefault.la", //gchar * filename; "Default", //gchar * name; init, //gint (*init) (Display * display, gint screen); - 0, frame_new, //gpointer (*frame_new) (struct _ObClient *c); + 0, /* */ + frame_new, //gpointer (*frame_new) (struct _ObClient *c); frame_free, //void (*frame_free) (gpointer self); frame_show, //void (*frame_show) (gpointer self); frame_hide, //void (*frame_hide) (gpointer self); @@ -1868,6 +1878,8 @@ ObFramePlugin plugin = { 0, //gpointer handler; frame_iconify_animating, /* */ frame_set_decorations, /* */ + + frame_update_title, /* */ /* This give the window area */ frame_get_window_area, /* */ frame_set_client_area, /* */ diff --git a/engines/default/plugin.h b/engines/default/plugin.h index 32fc010..024ec81 100644 --- a/engines/default/plugin.h +++ b/engines/default/plugin.h @@ -33,6 +33,8 @@ struct _ObDefaultFrame Window window; + gchar * stitle; /* The current title we draw */ + gboolean visible; gboolean max_horz; /* when maxed some decorations are hidden */ @@ -205,6 +207,8 @@ Strut frame_get_size(gpointer self); Rect frame_get_area(gpointer self); gint frame_get_decorations(gpointer self); +void frame_update_title (gpointer, const gchar *); + gboolean frame_is_visible(gpointer self); gboolean frame_is_max_horz(gpointer self); gboolean frame_is_max_vert(gpointer self); diff --git a/engines/default/render.c b/engines/default/render.c index 43fe0de..8846bd8 100644 --- a/engines/default/render.c +++ b/engines/default/render.c @@ -321,7 +321,7 @@ static void framerender_label(ObDefaultFrame *self, RrAppearance *a) if (!self->label_on) return; /* set the texture's text! */ - a->texture[0].data.text.string = self->client->title; + a->texture[0].data.text.string = self->stitle; RrPaint(a, self->label, self->label_width, theme_config.label_height); } diff --git a/openbox/client.c b/openbox/client.c index fcfd854..aacb6eb 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -279,6 +279,7 @@ void client_manage(Window window, ObPrompt *prompt) render_plugin->frame_set_press_flag (self->frame, OB_BUTTON_NONE); render_plugin->frame_set_is_focus (self->frame, FALSE); render_plugin->frame_set_decorations (self->frame, self->decorations); + render_plugin->frame_update_title (self->frame, self->title); render_plugin->frame_update_layout (self->frame, FALSE, TRUE); render_plugin->frame_update_skin (self->frame); @@ -583,7 +584,9 @@ ObClient *client_fake_manage(Window window) /* create the decoration frame for the client window and adjust its size */ self->frame = render_plugin->frame_new(self); render_plugin->frame_set_decorations (self->frame, self->decorations); + render_plugin->frame_update_title (self->frame, self->title); render_plugin->frame_update_layout (self->frame, FALSE, FALSE); + render_plugin->frame_update_skin (self->frame); ob_debug("gave extents left %d right %d top %d bottom %d", render_plugin->frame_get_size(self->frame).left, render_plugin->frame_get_size(self->frame).right, @@ -1965,8 +1968,11 @@ void client_update_title(ObClient *self) OBT_PROP_SETS(self->window, NET_WM_VISIBLE_NAME, utf8, visible); self->title = visible; - if (self->frame) - render_plugin->frame_update_layout (self->frame, FALSE, FALSE); + if (self->frame) { + /* update title render */ + render_plugin->frame_update_title (self->frame, self->title); + render_plugin->frame_update_skin (self->frame); + } /* update the icon title */ data = NULL; diff --git a/openbox/engine_interface.h b/openbox/engine_interface.h index 28f0408..b0ffd4a 100644 --- a/openbox/engine_interface.h +++ b/openbox/engine_interface.h @@ -162,6 +162,8 @@ struct _ObFramePlugin /* Set the layout wanted by client */ void (*frame_set_decorations)(gpointer, ObFrameDecorations); + + void (*frame_update_title)(gpointer, const gchar *); /* get the current window area */ Rect (*frame_get_window_area)(gpointer); -- 1.5.3.7