comparison src/gtkcombobox.c @ 11780:8cb75ba77f9d

[gaim-migrate @ 14071] I've been time travelling, I bumped into Gtk 2.0 on my way. Gaim now works with Gtk 2.0 again. Next stop: gtk 1.2 ... erm. what? ... NO! PS. resiak: I won! committer: Tailor Script <tailor@pidgin.im>
author Stu Tomlinson <stu@nosnilmot.com>
date Mon, 24 Oct 2005 00:31:41 +0000
parents d0d1d631ed49
children 1ee0a397157f
comparison
equal deleted inserted replaced
11779:80af53b5b3c5 11780:8cb75ba77f9d
41 /* 41 /*
42 #include <gtk/gtktreeprivate.h> 42 #include <gtk/gtktreeprivate.h>
43 */ 43 */
44 #include <gtk/gtkvseparator.h> 44 #include <gtk/gtkvseparator.h>
45 #include <gtk/gtkwindow.h> 45 #include <gtk/gtkwindow.h>
46 #include <gtk/gtkversion.h>
46 47
47 #include <gdk/gdkkeysyms.h> 48 #include <gdk/gdkkeysyms.h>
48 49
49 #include <gobject/gvaluecollector.h> 50 #include <gobject/gvaluecollector.h>
50 51
231 static void gtk_combo_box_menu_hide (GtkWidget *menu, 232 static void gtk_combo_box_menu_hide (GtkWidget *menu,
232 gpointer user_data); 233 gpointer user_data);
233 234
234 static void gtk_combo_box_set_popup_widget (GtkComboBox *combo_box, 235 static void gtk_combo_box_set_popup_widget (GtkComboBox *combo_box,
235 GtkWidget *popup); 236 GtkWidget *popup);
237 #if GTK_CHECK_VERSION(2,2,0)
236 static void gtk_combo_box_menu_position_below (GtkMenu *menu, 238 static void gtk_combo_box_menu_position_below (GtkMenu *menu,
237 gint *x, 239 gint *x,
238 gint *y, 240 gint *y,
239 gint *push_in, 241 gint *push_in,
240 gpointer user_data); 242 gpointer user_data);
246 static void gtk_combo_box_menu_position (GtkMenu *menu, 248 static void gtk_combo_box_menu_position (GtkMenu *menu,
247 gint *x, 249 gint *x,
248 gint *y, 250 gint *y,
249 gint *push_in, 251 gint *push_in,
250 gpointer user_data); 252 gpointer user_data);
253 #endif
251 254
252 static gint gtk_combo_box_calc_requested_width (GtkComboBox *combo_box, 255 static gint gtk_combo_box_calc_requested_width (GtkComboBox *combo_box,
253 GtkTreePath *path); 256 GtkTreePath *path);
254 static void gtk_combo_box_remeasure (GtkComboBox *combo_box); 257 static void gtk_combo_box_remeasure (GtkComboBox *combo_box);
255 258
290 GtkTreePath *path, 293 GtkTreePath *path,
291 GtkTreeIter *iter, 294 GtkTreeIter *iter,
292 gpointer data); 295 gpointer data);
293 296
294 /* list */ 297 /* list */
298 #if GTK_CHECK_VERSION(2,2,0)
295 static void gtk_combo_box_list_position (GtkComboBox *combo_box, 299 static void gtk_combo_box_list_position (GtkComboBox *combo_box,
296 gint *x, 300 gint *x,
297 gint *y, 301 gint *y,
298 gint *width, 302 gint *width,
299 gint *height); 303 gint *height);
304 #endif
300 static void gtk_combo_box_list_setup (GtkComboBox *combo_box); 305 static void gtk_combo_box_list_setup (GtkComboBox *combo_box);
301 static void gtk_combo_box_list_destroy (GtkComboBox *combo_box); 306 static void gtk_combo_box_list_destroy (GtkComboBox *combo_box);
302 307
303 static void gtk_combo_box_list_remove_grabs (GtkComboBox *combo_box); 308 static void gtk_combo_box_list_remove_grabs (GtkComboBox *combo_box);
304 309
907 { 912 {
908 if (!combo_box->priv->popup_window) 913 if (!combo_box->priv->popup_window)
909 { 914 {
910 combo_box->priv->popup_window = gtk_window_new (GTK_WINDOW_POPUP); 915 combo_box->priv->popup_window = gtk_window_new (GTK_WINDOW_POPUP);
911 gtk_window_set_resizable (GTK_WINDOW (combo_box->priv->popup_window), FALSE); 916 gtk_window_set_resizable (GTK_WINDOW (combo_box->priv->popup_window), FALSE);
917 #if GTK_CHECK_VERSION(2,2,0)
912 gtk_window_set_screen (GTK_WINDOW (combo_box->priv->popup_window), 918 gtk_window_set_screen (GTK_WINDOW (combo_box->priv->popup_window),
913 gtk_widget_get_screen (GTK_WIDGET (combo_box))); 919 gtk_widget_get_screen (GTK_WIDGET (combo_box)));
920 #endif
914 921
915 combo_box->priv->popup_frame = gtk_frame_new (NULL); 922 combo_box->priv->popup_frame = gtk_frame_new (NULL);
916 gtk_frame_set_shadow_type (GTK_FRAME (combo_box->priv->popup_frame), 923 gtk_frame_set_shadow_type (GTK_FRAME (combo_box->priv->popup_frame),
917 GTK_SHADOW_ETCHED_IN); 924 GTK_SHADOW_ETCHED_IN);
918 gtk_container_add (GTK_CONTAINER (combo_box->priv->popup_window), 925 gtk_container_add (GTK_CONTAINER (combo_box->priv->popup_window),
927 g_object_ref (G_OBJECT (popup)); 934 g_object_ref (G_OBJECT (popup));
928 combo_box->priv->popup_widget = popup; 935 combo_box->priv->popup_widget = popup;
929 } 936 }
930 } 937 }
931 938
939 #if GTK_CHECK_VERSION(2,2,0)
932 static void 940 static void
933 gtk_combo_box_menu_position_below (GtkMenu *menu, 941 gtk_combo_box_menu_position_below (GtkMenu *menu,
934 gint *x, 942 gint *x,
935 gint *y, 943 gint *y,
936 gint *push_in, 944 gint *push_in,
1131 if (*y + sample->allocation.height + *height <= monitor.y + monitor.height) 1139 if (*y + sample->allocation.height + *height <= monitor.y + monitor.height)
1132 *y += sample->allocation.height; 1140 *y += sample->allocation.height;
1133 else 1141 else
1134 *y -= *height; 1142 *y -= *height;
1135 } 1143 }
1144 #endif /* Gtk 2.2 */
1136 1145
1137 /** 1146 /**
1138 * gtk_combo_box_popup: 1147 * gtk_combo_box_popup:
1139 * @combo_box: a #GtkComboBox 1148 * @combo_box: a #GtkComboBox
1140 * 1149 *
1146 * Since: 2.4 1155 * Since: 2.4
1147 **/ 1156 **/
1148 void 1157 void
1149 gtk_combo_box_popup (GtkComboBox *combo_box) 1158 gtk_combo_box_popup (GtkComboBox *combo_box)
1150 { 1159 {
1151 gint x, y, width, height; 1160 gint x, y, width;
1161 #if GTK_CHECK_VERSION(2,2,0)
1162 gint height;
1163 #endif
1152 1164
1153 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box)); 1165 g_return_if_fail (GTK_IS_COMBO_BOX (combo_box));
1154 1166
1155 if (GTK_WIDGET_MAPPED (combo_box->priv->popup_widget)) 1167 if (GTK_WIDGET_MAPPED (combo_box->priv->popup_widget))
1156 return; 1168 return;
1171 MAX (width, requisition.width), -1); 1183 MAX (width, requisition.width), -1);
1172 } 1184 }
1173 1185
1174 gtk_menu_popup (GTK_MENU (combo_box->priv->popup_widget), 1186 gtk_menu_popup (GTK_MENU (combo_box->priv->popup_widget),
1175 NULL, NULL, 1187 NULL, NULL,
1176 gtk_combo_box_menu_position, combo_box, 1188 #if GTK_CHECK_VERSION(2,2,0)
1177 0, 0); 1189 gtk_combo_box_menu_position,
1190 #else
1191 NULL,
1192 #endif
1193 combo_box, 0, 0);
1178 return; 1194 return;
1179 } 1195 }
1180 1196
1181 gtk_widget_show_all (combo_box->priv->popup_frame); 1197 gtk_widget_show_all (combo_box->priv->popup_frame);
1198 #if GTK_CHECK_VERSION(2,2,0)
1182 gtk_combo_box_list_position (combo_box, &x, &y, &width, &height); 1199 gtk_combo_box_list_position (combo_box, &x, &y, &width, &height);
1200 #endif
1183 1201
1184 gtk_widget_set_size_request (combo_box->priv->popup_window, width, -1); 1202 gtk_widget_set_size_request (combo_box->priv->popup_window, width, -1);
1185 gtk_window_move (GTK_WINDOW (combo_box->priv->popup_window), x, y); 1203 gtk_window_move (GTK_WINDOW (combo_box->priv->popup_window), x, y);
1186 1204
1187 /* popup */ 1205 /* popup */
1276 !gtk_tree_model_get_iter_first (combo_box->priv->model, &iter)) 1294 !gtk_tree_model_get_iter_first (combo_box->priv->model, &iter))
1277 return; 1295 return;
1278 1296
1279 combo_box->priv->width = 0; 1297 combo_box->priv->width = 0;
1280 1298
1299 #if GTK_CHECK_VERSION(2,2,0)
1281 path = gtk_tree_path_new_from_indices (0, -1); 1300 path = gtk_tree_path_new_from_indices (0, -1);
1301 #else
1302 path = gtk_tree_path_new_first();
1303 #endif
1282 1304
1283 if (combo_box->priv->cell_view) 1305 if (combo_box->priv->cell_view)
1284 gtk_widget_style_get (combo_box->priv->cell_view, 1306 gtk_widget_style_get (combo_box->priv->cell_view,
1285 "focus-line-width", &padding, 1307 "focus-line-width", &padding,
1286 NULL); 1308 NULL);
1743 menu = combo_box->priv->popup_widget; 1765 menu = combo_box->priv->popup_widget;
1744 1766
1745 for (i = 0; i < items; i++) 1767 for (i = 0; i < items; i++)
1746 { 1768 {
1747 GtkTreePath *path; 1769 GtkTreePath *path;
1748 1770 #if GTK_CHECK_VERSION(2,2,0)
1749 path = gtk_tree_path_new_from_indices (i, -1); 1771 path = gtk_tree_path_new_from_indices (i, -1);
1772 #else
1773 char buf[32];
1774 g_snprintf(buf, sizeof(buf), "%d", i);
1775 path = gtk_tree_path_new_from_string(buf);
1776 #endif
1750 tmp = gtk_cell_view_menu_item_new_from_model (combo_box->priv->model, 1777 tmp = gtk_cell_view_menu_item_new_from_model (combo_box->priv->model,
1751 path); 1778 path);
1752 g_signal_connect (tmp, "activate", 1779 g_signal_connect (tmp, "activate",
1753 G_CALLBACK (gtk_combo_box_menu_item_activate), 1780 G_CALLBACK (gtk_combo_box_menu_item_activate),
1754 combo_box); 1781 combo_box);
1981 MAX (width, requisition.width), -1); 2008 MAX (width, requisition.width), -1);
1982 } 2009 }
1983 2010
1984 gtk_menu_popup (GTK_MENU (combo_box->priv->popup_widget), 2011 gtk_menu_popup (GTK_MENU (combo_box->priv->popup_widget),
1985 NULL, NULL, 2012 NULL, NULL,
1986 gtk_combo_box_menu_position, combo_box, 2013 #if GTK_CHECK_VERSION(2,2,0)
1987 event->button, event->time); 2014 gtk_combo_box_menu_position,
2015 #else
2016 NULL,
2017 #endif
2018 combo_box, event->button, event->time);
1988 2019
1989 return TRUE; 2020 return TRUE;
1990 } 2021 }
1991 2022
1992 return FALSE; 2023 return FALSE;
2289 2320
2290 if (combo_box->priv->active_item != -1) 2321 if (combo_box->priv->active_item != -1)
2291 { 2322 {
2292 GtkTreePath *path; 2323 GtkTreePath *path;
2293 2324
2325 #if GTK_CHECK_VERSION(2,2,0)
2294 path = gtk_tree_path_new_from_indices (combo_box->priv->active_item, -1); 2326 path = gtk_tree_path_new_from_indices (combo_box->priv->active_item, -1);
2327 #else
2328 char buf[32];
2329 g_snprintf(buf, sizeof(buf), "%d", combo_box->priv->active_item);
2330 path = gtk_tree_path_new_from_string(buf);
2331 #endif
2295 if (path) 2332 if (path)
2296 { 2333 {
2297 gtk_tree_view_set_cursor (GTK_TREE_VIEW (combo_box->priv->tree_view), 2334 gtk_tree_view_set_cursor (GTK_TREE_VIEW (combo_box->priv->tree_view),
2298 path, NULL, FALSE); 2335 path, NULL, FALSE);
2299 gtk_tree_path_free (path); 2336 gtk_tree_path_free (path);
3193 if (combo_box->priv->cell_view) 3230 if (combo_box->priv->cell_view)
3194 gtk_cell_view_set_displayed_row (GTK_CELL_VIEW (combo_box->priv->cell_view), NULL); 3231 gtk_cell_view_set_displayed_row (GTK_CELL_VIEW (combo_box->priv->cell_view), NULL);
3195 } 3232 }
3196 else 3233 else
3197 { 3234 {
3235 #if GTK_CHECK_VERSION(2,2,0)
3198 path = gtk_tree_path_new_from_indices (index, -1); 3236 path = gtk_tree_path_new_from_indices (index, -1);
3237 #else
3238 char buf[32];
3239 g_snprintf(buf, sizeof(buf), "%d", index);
3240 path = gtk_tree_path_new_from_string(buf);
3241 #endif
3199 3242
3200 if (combo_box->priv->tree_view) 3243 if (combo_box->priv->tree_view)
3201 gtk_tree_view_set_cursor (GTK_TREE_VIEW (combo_box->priv->tree_view), path, NULL, FALSE); 3244 gtk_tree_view_set_cursor (GTK_TREE_VIEW (combo_box->priv->tree_view), path, NULL, FALSE);
3202 else 3245 else
3203 { 3246 {
3233 GtkTreeIter *iter) 3276 GtkTreeIter *iter)
3234 { 3277 {
3235 GtkTreePath *path; 3278 GtkTreePath *path;
3236 gint active; 3279 gint active;
3237 gboolean retval; 3280 gboolean retval;
3281 #if !GTK_CHECK_VERSION(2,2,0)
3282 char buf[32];
3283 #endif
3238 3284
3239 g_return_val_if_fail (GTK_IS_COMBO_BOX (combo_box), FALSE); 3285 g_return_val_if_fail (GTK_IS_COMBO_BOX (combo_box), FALSE);
3240 3286
3241 active = gtk_combo_box_get_active (combo_box); 3287 active = gtk_combo_box_get_active (combo_box);
3242 if (active < 0) 3288 if (active < 0)
3243 return FALSE; 3289 return FALSE;
3244 3290
3291 #if GTK_CHECK_VERSION(2,2,0)
3245 path = gtk_tree_path_new_from_indices (active, -1); 3292 path = gtk_tree_path_new_from_indices (active, -1);
3293 #else
3294 g_snprintf(buf, sizeof(buf), "%d", active);
3295 path = gtk_tree_path_new_from_string(buf);
3296 #endif
3246 retval = gtk_tree_model_get_iter (gtk_combo_box_get_model (combo_box), 3297 retval = gtk_tree_model_get_iter (gtk_combo_box_get_model (combo_box),
3247 iter, path); 3298 iter, path);
3248 gtk_tree_path_free (path); 3299 gtk_tree_path_free (path);
3249 3300
3250 return retval; 3301 return retval;