comparison console/libgnt/gntcombobox.c @ 14047:c5bfede33622

[gaim-migrate @ 16660] A couple of minor adjustments, memory leak fixes. And request-ui is almost complete now. committer: Tailor Script <tailor@pidgin.im>
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Mon, 07 Aug 2006 02:15:58 +0000
parents 143474e2b1cb
children fa8f65cd912c
comparison
equal deleted inserted replaced
14046:eb1a7d176149 14047:c5bfede33622
39 GntColorType type; 39 GntColorType type;
40 int len; 40 int len;
41 41
42 if (box->dropdown) 42 if (box->dropdown)
43 { 43 {
44 text = (char *)gnt_tree_get_selection_text(GNT_TREE(box->dropdown)); 44 text = gnt_tree_get_selection_text(GNT_TREE(box->dropdown));
45 box->selected = gnt_tree_get_selection_data(GNT_TREE(box->dropdown)); 45 box->selected = gnt_tree_get_selection_data(GNT_TREE(box->dropdown));
46 } 46 }
47 47
48 if (text == NULL) 48 if (text == NULL)
49 text = ""; 49 text = g_strdup(text);
50
51 text = g_strdup(text);
52 50
53 if (gnt_widget_has_focus(widget)) 51 if (gnt_widget_has_focus(widget))
54 type = GNT_COLOR_HIGHLIGHT; 52 type = GNT_COLOR_HIGHLIGHT;
55 else 53 else
56 type = GNT_COLOR_NORMAL; 54 type = GNT_COLOR_NORMAL;
100 { 98 {
101 case '\r': 99 case '\r':
102 case '\t': 100 case '\t':
103 set_selection(box, gnt_tree_get_selection_data(GNT_TREE(box->dropdown))); 101 set_selection(box, gnt_tree_get_selection_data(GNT_TREE(box->dropdown)));
104 case 27: 102 case 27:
103 gnt_tree_set_selected(GNT_TREE(box->dropdown), box->selected);
105 gnt_widget_hide(box->dropdown->parent); 104 gnt_widget_hide(box->dropdown->parent);
106 return TRUE; 105 return TRUE;
107 break; 106 break;
108 } 107 }
109 } 108 }
116 { 115 {
117 if (strcmp(text + 1, GNT_KEY_UP) == 0 || 116 if (strcmp(text + 1, GNT_KEY_UP) == 0 ||
118 strcmp(text + 1, GNT_KEY_DOWN) == 0) 117 strcmp(text + 1, GNT_KEY_DOWN) == 0)
119 { 118 {
120 GntWidget *parent = box->dropdown->parent; 119 GntWidget *parent = box->dropdown->parent;
121 gnt_widget_set_size(box->dropdown, widget->priv.width, 9); 120 int height = g_list_length(GNT_TREE(box->dropdown)->list);
122 gnt_widget_set_position(parent, 121 int y = widget->priv.y + widget->priv.height - 1;
123 widget->priv.x, widget->priv.y + widget->priv.height - 1); 122 gnt_widget_set_size(box->dropdown, widget->priv.width, height + 2);
123
124 if (y + height + 2 >= getmaxy(stdscr))
125 y = widget->priv.y - height - 1;
126 gnt_widget_set_position(parent, widget->priv.x, y);
124 if (parent->window) 127 if (parent->window)
125 { 128 {
126 if (mvwin(parent->window, widget->priv.y + widget->priv.height - 1, 129 mvwin(parent->window, y, widget->priv.x);
127 widget->priv.x) == ERR)
128 mvwin(parent->window,
129 widget->priv.y - 9 + 1, widget->priv.x);
130 } 130 }
131 131
132 GNT_WIDGET_SET_FLAGS(parent, GNT_WIDGET_TRANSIENT);
133 gnt_widget_draw(parent); 132 gnt_widget_draw(parent);
134 return TRUE; 133 return TRUE;
135 } 134 }
136 } 135 }
137 } 136 }
190 GNT_WIDGET_SET_FLAGS(GNT_WIDGET(instance), 189 GNT_WIDGET_SET_FLAGS(GNT_WIDGET(instance),
191 GNT_WIDGET_GROW_X | GNT_WIDGET_CAN_TAKE_FOCUS | GNT_WIDGET_NO_SHADOW); 190 GNT_WIDGET_GROW_X | GNT_WIDGET_CAN_TAKE_FOCUS | GNT_WIDGET_NO_SHADOW);
192 combo->dropdown = gnt_tree_new(); 191 combo->dropdown = gnt_tree_new();
193 192
194 box = gnt_box_new(FALSE, FALSE); 193 box = gnt_box_new(FALSE, FALSE);
195 GNT_WIDGET_SET_FLAGS(box, GNT_WIDGET_NO_SHADOW | GNT_WIDGET_NO_BORDER); 194 GNT_WIDGET_SET_FLAGS(box, GNT_WIDGET_NO_SHADOW | GNT_WIDGET_NO_BORDER | GNT_WIDGET_TRANSIENT);
196 gnt_box_set_pad(GNT_BOX(box), 0); 195 gnt_box_set_pad(GNT_BOX(box), 0);
197 gnt_box_add_widget(GNT_BOX(box), combo->dropdown); 196 gnt_box_add_widget(GNT_BOX(box), combo->dropdown);
198 197
199 widget->priv.minw = 4; 198 widget->priv.minw = 4;
200 widget->priv.minh = 3; 199 widget->priv.minh = 3;