summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSadrul Habib Chowdhury <sadrul@pidgin.im>2007-12-01 22:17:32 +0000
committerSadrul Habib Chowdhury <sadrul@pidgin.im>2007-12-01 22:17:32 +0000
commit5ed13d49a69f19a7c53835916bd0b44540945c77 (patch)
tree6a4c6652bea5752fea90b8924cc6625f8cc202e9
parent359d87a1e54b32ce09796bc341bc2e66fb9b72e6 (diff)
downloadpidgin-5ed13d49a69f19a7c53835916bd0b44540945c77.tar.gz
Pluck some bug-fixes for finch/gnt for the bug-fix release.
applied changes from 8e8cba27fc7816cd4f4c7cf3b88766fa17044415 through 2702e711166c502d17af8586d58eac0247a01886 applied changes from c42b2b239966056ac4b37209403905d874da87ee through fb4562e25805935b7f84c12cc47a028a0dc25f3a applied changes from fb4562e25805935b7f84c12cc47a028a0dc25f3a through e8f945cbbdd235c0fb371834fddf396f568b672f applied changes from 96bb0250f516ff49a03fcaa2b7720865d9668ccd through 10b5584bcb92c67e0dc20d17fd72eeaf351aaa86 applied changes from 10b5584bcb92c67e0dc20d17fd72eeaf351aaa86 through 0fbf448aa3c17cb83eac458e6f9b06e38fd14d1d
-rw-r--r--finch/libgnt/gnt.h4
-rw-r--r--finch/libgnt/gntbox.c10
-rw-r--r--finch/libgnt/gntentry.c7
-rw-r--r--finch/libgnt/gntmenu.c19
-rw-r--r--finch/libgnt/gntwindow.c3
-rw-r--r--finch/libgnt/test/tv.c4
6 files changed, 39 insertions, 8 deletions
diff --git a/finch/libgnt/gnt.h b/finch/libgnt/gnt.h
index 2599b9dc52..9f2f3b6105 100644
--- a/finch/libgnt/gnt.h
+++ b/finch/libgnt/gnt.h
@@ -30,6 +30,9 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*/
+#ifndef GNT_H
+#define GNT_H
+
#include <glib.h>
#include "gntwidget.h"
#include "gntclipboard.h"
@@ -201,3 +204,4 @@ gboolean gnt_giveup_console(const char *wd, char **argv, char **envp,
*/
gboolean gnt_is_refugee(void);
+#endif /* GNT_H */
diff --git a/finch/libgnt/gntbox.c b/finch/libgnt/gntbox.c
index c4320f48d6..6d7b17fbaa 100644
--- a/finch/libgnt/gntbox.c
+++ b/finch/libgnt/gntbox.c
@@ -851,8 +851,14 @@ void gnt_box_move_focus(GntBox *box, int dir)
void gnt_box_give_focus_to_child(GntBox *box, GntWidget *widget)
{
- GList *find = g_list_find(box->focus, widget);
- gpointer now = box->active;
+ GList *find;
+ gpointer now;
+
+ while (GNT_WIDGET(box)->parent)
+ box = GNT_BOX(GNT_WIDGET(box)->parent);
+
+ find = g_list_find(box->focus, widget);
+ now = box->active;
if (find)
box->active = widget;
if (now && now != box->active)
diff --git a/finch/libgnt/gntentry.c b/finch/libgnt/gntentry.c
index 0e8ea64188..d72da96a84 100644
--- a/finch/libgnt/gntentry.c
+++ b/finch/libgnt/gntentry.c
@@ -575,15 +575,16 @@ static const char *
next_begin_word(const char *text, const char *end)
{
gunichar ch = 0;
+
+ while (text && text < end && g_unichar_isspace(g_utf8_get_char(text)))
+ text = g_utf8_find_next_char(text, end);
+
ch = g_utf8_get_char(text);
while ((text = g_utf8_find_next_char(text, end)) != NULL && text <= end) {
gunichar cur = g_utf8_get_char(text);
if (!SAME(ch, cur))
break;
}
-
- while (text && text < end && g_unichar_isspace(g_utf8_get_char(text)))
- text = g_utf8_find_next_char(text, end);
return (text ? text : end);
}
diff --git a/finch/libgnt/gntmenu.c b/finch/libgnt/gntmenu.c
index d46708bde8..388213368f 100644
--- a/finch/libgnt/gntmenu.c
+++ b/finch/libgnt/gntmenu.c
@@ -47,6 +47,8 @@ static void (*org_map)(GntWidget *wid);
static void (*org_size_request)(GntWidget *wid);
static gboolean (*org_key_pressed)(GntWidget *w, const char *t);
+static void menuitem_activate(GntMenu *menu, GntMenuItem *item);
+
static void
menu_hide_all(GntMenu *menu)
{
@@ -56,6 +58,20 @@ menu_hide_all(GntMenu *menu)
}
static void
+show_submenu(GntMenu *menu)
+{
+ GntMenuItem *item;
+
+ if (menu->type != GNT_MENU_TOPLEVEL)
+ return;
+
+ item = g_list_nth_data(menu->list, menu->selected);
+ if (!item || !item->submenu)
+ return;
+ menuitem_activate(menu, item);
+}
+
+static void
gnt_menu_draw(GntWidget *widget)
{
GntMenu *menu = GNT_MENU(widget);
@@ -276,6 +292,8 @@ gnt_menu_key_pressed(GntWidget *widget, const char *text)
gnt_widget_hide(widget);
} else
gnt_widget_hide(widget);
+ if (par && par->type == GNT_MENU_TOPLEVEL)
+ gnt_menu_key_pressed(GNT_WIDGET(par), text);
return TRUE;
}
@@ -297,6 +315,7 @@ gnt_menu_key_pressed(GntWidget *widget, const char *text)
GntMenu *sub = menu->submenu;
if (sub)
gnt_widget_hide(GNT_WIDGET(sub));
+ show_submenu(menu);
gnt_widget_draw(widget);
return TRUE;
}
diff --git a/finch/libgnt/gntwindow.c b/finch/libgnt/gntwindow.c
index 4f1da325b2..1423b71fa8 100644
--- a/finch/libgnt/gntwindow.c
+++ b/finch/libgnt/gntwindow.c
@@ -62,7 +62,8 @@ gnt_window_destroy(GntWidget *widget)
if (window->menu)
gnt_widget_destroy(GNT_WIDGET(window->menu));
if (window->priv) {
- g_hash_table_destroy(window->priv->accels);
+ if (window->priv->accels)
+ g_hash_table_destroy(window->priv->accels);
g_free(window->priv);
}
org_destroy(widget);
diff --git a/finch/libgnt/test/tv.c b/finch/libgnt/test/tv.c
index d25aa9121b..c82b74bfa9 100644
--- a/finch/libgnt/test/tv.c
+++ b/finch/libgnt/test/tv.c
@@ -112,8 +112,8 @@ int main()
gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(view), "plugins: ", GNT_TEXT_FLAG_BOLD);
gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(view), "this is the 2nd line\n", GNT_TEXT_FLAG_NORMAL);
- gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(view), "plugins: ", GNT_TEXT_FLAG_BOLD);
- gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(view), "this is the 3rd line\n", GNT_TEXT_FLAG_NORMAL);
+ gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(view), "plugins: ", GNT_TEXT_FLAG_BOLD | gnt_color_pair(GNT_COLOR_HIGHLIGHT));
+ gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(view), "this is the 3rd line\n", GNT_TEXT_FLAG_NORMAL | gnt_color_pair(GNT_COLOR_HIGHLIGHT));
gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(view), "plugins: ", GNT_TEXT_FLAG_BOLD);
gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(view), "this is the 4th line\n", GNT_TEXT_FLAG_NORMAL);