Mercurial > pidgin.yaz
diff finch/libgnt/wms/irssi.c @ 17991:386047fb178b
Draw a separator line between the buddylist and the conversation windows.
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Sat, 02 Jun 2007 06:39:02 +0000 |
parents | 1bccb9641ef3 |
children | 08e93462f189 |
line wrap: on
line diff
--- a/finch/libgnt/wms/irssi.c Sat Jun 02 05:10:05 2007 +0000 +++ b/finch/libgnt/wms/irssi.c Sat Jun 02 06:39:02 2007 +0000 @@ -35,18 +35,16 @@ static void (*org_new_window)(GntWM *wm, GntWidget *win); -static GntWidget * -find_widget(GntWM *wm, const char *wname) +/* This is changed whenever the buddylist is opened/closed or resized. */ +static int buddylistwidth; + +static gboolean +is_budddylist(GntWidget *win) { - const GList *iter = wm->list; - for (; iter; iter = iter->next) { - GntWidget *widget = iter->data; - const char *name = gnt_widget_get_name(widget); - if (name && strcmp(name, wname) == 0) { - return widget; - } - } - return NULL; + const char *name = gnt_widget_get_name(win); + if (name && strcmp(name, "buddylist") == 0) + return TRUE; + return FALSE; } static void @@ -64,8 +62,6 @@ irssi_new_window(GntWM *wm, GntWidget *win) { const char *name; - int bw; - GntWidget *blist; name = gnt_widget_get_name(win); if (!name || strcmp(name, "conversation-window")) { @@ -79,23 +75,41 @@ mvwin(win->window, y, x); } else { remove_border_set_position_size(wm, win, 0, 0, -1, getmaxy(stdscr) - 1); + gnt_widget_get_size(win, &buddylistwidth, NULL); + mvwvline(stdscr, 0, buddylistwidth, ACS_VLINE | COLOR_PAIR(GNT_COLOR_NORMAL), getmaxy(stdscr) - 1); + buddylistwidth++; } } org_new_window(wm, win); return; } - blist = find_widget(wm, "buddylist"); - if (blist) { - gnt_widget_get_size(blist, &bw, NULL); - bw++; - } else { - bw = 0; - } + /* The window we have here is a conversation window. */ + remove_border_set_position_size(wm, win, buddylistwidth, 0, + getmaxx(stdscr) - buddylistwidth, getmaxy(stdscr) - 1); + org_new_window(wm, win); +} + +static void +irssi_window_resized(GntWM *wm, GntNode *node) +{ + if (!is_budddylist(node->me)) + return; - /* The window we have here is a conversation window. */ - remove_border_set_position_size(wm, win, bw, 0, getmaxx(stdscr) - bw, getmaxy(stdscr) - 1); - org_new_window(wm, win); + if (buddylistwidth) + mvwvline(stdscr, 0, buddylistwidth - 1, + ' ' | COLOR_PAIR(GNT_COLOR_NORMAL), getmaxy(stdscr) - 1); + gnt_widget_get_size(node->me, &buddylistwidth, NULL); + mvwvline(stdscr, 0, buddylistwidth, ACS_VLINE | COLOR_PAIR(GNT_COLOR_NORMAL), getmaxy(stdscr) - 1); + buddylistwidth++; +} + +static gboolean +irssi_close_window(GntWM *wm, GntWidget *win) +{ + if (is_budddylist(win)) + buddylistwidth = 0; + return FALSE; } static void @@ -106,6 +120,8 @@ org_new_window = pclass->new_window; pclass->new_window = irssi_new_window; + pclass->window_resized = irssi_window_resized; + pclass->close_window = irssi_close_window; gnt_style_read_actions(G_OBJECT_CLASS_TYPE(klass), GNT_BINDABLE_CLASS(klass)); GNTDEBUG; @@ -113,6 +129,7 @@ void gntwm_init(GntWM **wm) { + buddylistwidth = 0; *wm = g_object_new(TYPE_IRSSI, NULL); }