| 122 static void |
122 static void |
| 123 realize_toolbar_font(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
123 realize_toolbar_font(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
| 124 { |
124 { |
| 125 GtkFontSelection *sel; |
125 GtkFontSelection *sel; |
| 126 |
126 |
| 127 sel = GTK_FONT_SELECTION(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->fontsel); |
127 sel = GTK_FONT_SELECTION( |
| 128 gtk_widget_hide_all(gtk_widget_get_parent(sel->size_entry)); |
128 gtk_font_selection_dialog_get_font_selection(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog))); |
| 129 gtk_widget_show_all(sel->family_list); |
129 gtk_widget_hide(gtk_widget_get_parent( |
| 130 gtk_widget_show(gtk_widget_get_parent(sel->family_list)); |
130 gtk_font_selection_get_size_entry(sel))); |
| 131 gtk_widget_show(gtk_widget_get_parent(gtk_widget_get_parent(sel->family_list))); |
131 gtk_widget_show_all(gtk_font_selection_get_family_list(sel)); |
| |
132 gtk_widget_show(gtk_widget_get_parent( |
| |
133 gtk_font_selection_get_family_list(sel))); |
| |
134 gtk_widget_show(gtk_widget_get_parent(gtk_widget_get_parent( |
| |
135 gtk_font_selection_get_family_list(sel)))); |
| 132 } |
136 } |
| 133 |
137 |
| 134 static void |
138 static void |
| 135 cancel_toolbar_font(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
139 cancel_toolbar_font(GtkWidget *widget, GtkIMHtmlToolbar *toolbar) |
| 136 { |
140 { |
| 189 DEFAULT_FONT_FACE); |
193 DEFAULT_FONT_FACE); |
| 190 } |
194 } |
| 191 |
195 |
| 192 g_signal_connect(G_OBJECT(toolbar->font_dialog), "delete_event", |
196 g_signal_connect(G_OBJECT(toolbar->font_dialog), "delete_event", |
| 193 G_CALLBACK(destroy_toolbar_font), toolbar); |
197 G_CALLBACK(destroy_toolbar_font), toolbar); |
| 194 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->ok_button), "clicked", |
198 g_signal_connect(G_OBJECT( |
| 195 G_CALLBACK(apply_font), toolbar->font_dialog); |
199 gtk_font_selection_dialog_get_ok_button(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog))), |
| 196 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->cancel_button), "clicked", |
200 "clicked", G_CALLBACK(apply_font), toolbar->font_dialog); |
| 197 G_CALLBACK(cancel_toolbar_font), toolbar); |
201 g_signal_connect(G_OBJECT( |
| |
202 gtk_font_selection_dialog_get_cancel_button(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog))), |
| |
203 "clicked", G_CALLBACK(cancel_toolbar_font), toolbar); |
| 198 g_signal_connect_after(G_OBJECT(toolbar->font_dialog), "realize", |
204 g_signal_connect_after(G_OBJECT(toolbar->font_dialog), "realize", |
| 199 G_CALLBACK(realize_toolbar_font), toolbar); |
205 G_CALLBACK(realize_toolbar_font), toolbar); |
| 200 } |
206 } |
| 201 gtk_window_present(GTK_WINDOW(toolbar->font_dialog)); |
207 gtk_window_present(GTK_WINDOW(toolbar->font_dialog)); |
| 202 } else { |
208 } else { |
| 251 GtkWidget *colorsel; |
257 GtkWidget *colorsel; |
| 252 GdkColor fgcolor; |
258 GdkColor fgcolor; |
| 253 char *color = gtk_imhtml_get_current_forecolor(GTK_IMHTML(toolbar->imhtml)); |
259 char *color = gtk_imhtml_get_current_forecolor(GTK_IMHTML(toolbar->imhtml)); |
| 254 |
260 |
| 255 if (!toolbar->fgcolor_dialog) { |
261 if (!toolbar->fgcolor_dialog) { |
| 256 |
262 GtkWidget *ok_button; |
| |
263 GtkWidget *cancel_button; |
| |
264 |
| 257 toolbar->fgcolor_dialog = gtk_color_selection_dialog_new(_("Select Text Color")); |
265 toolbar->fgcolor_dialog = gtk_color_selection_dialog_new(_("Select Text Color")); |
| 258 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->colorsel; |
266 colorsel = |
| |
267 gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)); |
| 259 if (color) { |
268 if (color) { |
| 260 gdk_color_parse(color, &fgcolor); |
269 gdk_color_parse(color, &fgcolor); |
| 261 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor); |
270 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor); |
| 262 g_free(color); |
271 g_free(color); |
| 263 } |
272 } |
| 264 |
273 |
| 265 g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); |
274 g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); |
| 266 |
275 |
| |
276 g_object_get(G_OBJECT(toolbar->fgcolor_dialog), "ok-button", &ok_button, NULL); |
| |
277 g_object_get(G_OBJECT(toolbar->fgcolor_dialog), "cancel-button", |
| |
278 &cancel_button, NULL); |
| 267 g_signal_connect(G_OBJECT(toolbar->fgcolor_dialog), "delete_event", |
279 g_signal_connect(G_OBJECT(toolbar->fgcolor_dialog), "delete_event", |
| 268 G_CALLBACK(destroy_toolbar_fgcolor), toolbar); |
280 G_CALLBACK(destroy_toolbar_fgcolor), toolbar); |
| 269 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->ok_button), "clicked", |
281 g_signal_connect(G_OBJECT(ok_button), "clicked", G_CALLBACK(do_fgcolor), colorsel); |
| 270 G_CALLBACK(do_fgcolor), colorsel); |
282 g_signal_connect(G_OBJECT(cancel_button), "clicked", |
| 271 g_signal_connect(G_OBJECT (GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->cancel_button), "clicked", |
283 G_CALLBACK(cancel_toolbar_fgcolor), toolbar); |
| 272 G_CALLBACK(cancel_toolbar_fgcolor), toolbar); |
|
| 273 } |
284 } |
| 274 gtk_window_present(GTK_WINDOW(toolbar->fgcolor_dialog)); |
285 gtk_window_present(GTK_WINDOW(toolbar->fgcolor_dialog)); |
| 275 } else { |
286 } else { |
| 276 cancel_toolbar_fgcolor(color, toolbar); |
287 cancel_toolbar_fgcolor(color, toolbar); |
| 277 } |
288 } |
| 331 GtkWidget *colorsel; |
342 GtkWidget *colorsel; |
| 332 GdkColor bgcolor; |
343 GdkColor bgcolor; |
| 333 char *color = gtk_imhtml_get_current_backcolor(GTK_IMHTML(toolbar->imhtml)); |
344 char *color = gtk_imhtml_get_current_backcolor(GTK_IMHTML(toolbar->imhtml)); |
| 334 |
345 |
| 335 if (!toolbar->bgcolor_dialog) { |
346 if (!toolbar->bgcolor_dialog) { |
| 336 |
347 GtkWidget *ok_button; |
| |
348 GtkWidget *cancel_button; |
| |
349 |
| 337 toolbar->bgcolor_dialog = gtk_color_selection_dialog_new(_("Select Background Color")); |
350 toolbar->bgcolor_dialog = gtk_color_selection_dialog_new(_("Select Background Color")); |
| 338 colorsel = GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->colorsel; |
351 colorsel = |
| 339 if (color) { |
352 gtk_color_selection_dialog_get_color_selection(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)); |
| |
353 |
| |
354 if (color) { |
| 340 gdk_color_parse(color, &bgcolor); |
355 gdk_color_parse(color, &bgcolor); |
| 341 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor); |
356 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor); |
| 342 g_free(color); |
357 g_free(color); |
| 343 } |
358 } |
| 344 |
359 |
| 345 g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); |
360 g_object_set_data(G_OBJECT(colorsel), "purple_toolbar", toolbar); |
| 346 |
361 |
| |
362 g_object_get(G_OBJECT(toolbar->bgcolor_dialog), "ok-button", &ok_button, NULL); |
| |
363 g_object_get(G_OBJECT(toolbar->bgcolor_dialog), "cancel-button", |
| |
364 &cancel_button, NULL); |
| 347 g_signal_connect(G_OBJECT(toolbar->bgcolor_dialog), "delete_event", |
365 g_signal_connect(G_OBJECT(toolbar->bgcolor_dialog), "delete_event", |
| 348 G_CALLBACK(destroy_toolbar_bgcolor), toolbar); |
366 G_CALLBACK(destroy_toolbar_bgcolor), toolbar); |
| 349 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->ok_button), "clicked", |
367 g_signal_connect(G_OBJECT(ok_button), "clicked", |
| 350 G_CALLBACK(do_bgcolor), colorsel); |
368 G_CALLBACK(do_bgcolor), colorsel); |
| 351 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->cancel_button), "clicked", |
369 g_signal_connect(G_OBJECT(cancel_button), "clicked", |
| 352 G_CALLBACK(cancel_toolbar_bgcolor), toolbar); |
370 G_CALLBACK(cancel_toolbar_bgcolor), toolbar); |
| 353 |
371 |
| 354 } |
372 } |
| 355 gtk_window_present(GTK_WINDOW(toolbar->bgcolor_dialog)); |
373 gtk_window_present(GTK_WINDOW(toolbar->bgcolor_dialog)); |
| 356 } else { |
374 } else { |
| 1093 gboolean *push_in, |
1111 gboolean *push_in, |
| 1094 gpointer data) |
1112 gpointer data) |
| 1095 { |
1113 { |
| 1096 GtkWidget *widget = GTK_WIDGET(data); |
1114 GtkWidget *widget = GTK_WIDGET(data); |
| 1097 GtkRequisition menu_req; |
1115 GtkRequisition menu_req; |
| 1098 gint ythickness = widget->style->ythickness; |
1116 GtkAllocation allocation; |
| |
1117 gint ythickness = gtk_widget_get_style(widget)->ythickness; |
| 1099 int savy; |
1118 int savy; |
| 1100 |
1119 |
| |
1120 gtk_widget_get_allocation(widget, &allocation); |
| 1101 gtk_widget_size_request(GTK_WIDGET (menu), &menu_req); |
1121 gtk_widget_size_request(GTK_WIDGET (menu), &menu_req); |
| 1102 gdk_window_get_origin(widget->window, x, y); |
1122 gdk_window_get_origin(gtk_widget_get_window(widget), x, y); |
| 1103 *x += widget->allocation.x; |
1123 *x += allocation.x; |
| 1104 *y += widget->allocation.y + widget->allocation.height; |
1124 *y += allocation.y + allocation.height; |
| 1105 savy = *y; |
1125 savy = *y; |
| 1106 |
1126 |
| 1107 pidgin_menu_position_func_helper(menu, x, y, push_in, data); |
1127 pidgin_menu_position_func_helper(menu, x, y, push_in, data); |
| 1108 |
1128 |
| 1109 if (savy > *y + ythickness + 1) |
1129 if (savy > *y + ythickness + 1) |
| 1110 *y -= widget->allocation.height; |
1130 *y -= allocation.height; |
| 1111 } |
1131 } |
| 1112 |
1132 |
| 1113 static gboolean |
1133 static gboolean |
| 1114 button_activate_on_click(GtkWidget *button, GdkEventButton *event, GtkIMHtmlToolbar *toolbar) |
1134 button_activate_on_click(GtkWidget *button, GdkEventButton *event, GtkIMHtmlToolbar *toolbar) |
| 1115 { |
1135 { |
| 1197 gboolean wide; |
1217 gboolean wide; |
| 1198 |
1218 |
| 1199 if (event->button != 3) |
1219 if (event->button != 3) |
| 1200 return FALSE; |
1220 return FALSE; |
| 1201 |
1221 |
| 1202 wide = GTK_WIDGET_VISIBLE(toolbar->bold); |
1222 wide = gtk_widget_get_visible(toolbar->bold); |
| 1203 |
1223 |
| 1204 menu = gtk_menu_new(); |
1224 menu = gtk_menu_new(); |
| 1205 item = gtk_menu_item_new_with_mnemonic(wide ? _("Group Items") : _("Ungroup Items")); |
1225 item = gtk_menu_item_new_with_mnemonic(wide ? _("Group Items") : _("Ungroup Items")); |
| 1206 g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(switch_toolbar_view), toolbar); |
1226 g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(switch_toolbar_view), toolbar); |
| 1207 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
1227 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
| 1292 } |
1312 } |
| 1293 |
1313 |
| 1294 static void |
1314 static void |
| 1295 button_visibility_changed(GtkWidget *button, gpointer dontcare, GtkWidget *item) |
1315 button_visibility_changed(GtkWidget *button, gpointer dontcare, GtkWidget *item) |
| 1296 { |
1316 { |
| 1297 if (GTK_WIDGET_VISIBLE(button)) |
1317 if (gtk_widget_get_visible(button)) |
| 1298 gtk_widget_hide(item); |
1318 gtk_widget_hide(item); |
| 1299 else |
1319 else |
| 1300 gtk_widget_show(item); |
1320 gtk_widget_show(item); |
| 1301 } |
1321 } |
| 1302 |
1322 |
| 1303 static void |
1323 static void |
| 1304 button_sensitiveness_changed(GtkWidget *button, gpointer dontcare, GtkWidget *item) |
1324 button_sensitiveness_changed(GtkWidget *button, gpointer dontcare, GtkWidget *item) |
| 1305 { |
1325 { |
| 1306 gtk_widget_set_sensitive(item, GTK_WIDGET_IS_SENSITIVE(button)); |
1326 gtk_widget_set_sensitive(item, gtk_widget_get_sensitive(button)); |
| 1307 } |
1327 } |
| 1308 |
1328 |
| 1309 static void |
1329 static void |
| 1310 update_menuitem(GtkToggleButton *button, GtkCheckMenuItem *item) |
1330 update_menuitem(GtkToggleButton *button, GtkCheckMenuItem *item) |
| 1311 { |
1331 { |
| 1324 static void |
1344 static void |
| 1325 imhtmltoolbar_view_pref_changed(const char *name, PurplePrefType type, |
1345 imhtmltoolbar_view_pref_changed(const char *name, PurplePrefType type, |
| 1326 gconstpointer value, gpointer toolbar) |
1346 gconstpointer value, gpointer toolbar) |
| 1327 { |
1347 { |
| 1328 if (value) { |
1348 if (value) { |
| 1329 gtk_widget_hide_all(g_object_get_data(G_OBJECT(toolbar), "lean-view")); |
1349 gtk_widget_hide(g_object_get_data(G_OBJECT(toolbar), "lean-view")); |
| 1330 gtk_widget_show_all(g_object_get_data(G_OBJECT(toolbar), "wide-view")); |
1350 gtk_widget_show_all(g_object_get_data(G_OBJECT(toolbar), "wide-view")); |
| 1331 } else { |
1351 } else { |
| 1332 gtk_widget_hide_all(g_object_get_data(G_OBJECT(toolbar), "wide-view")); |
1352 gtk_widget_hide(g_object_get_data(G_OBJECT(toolbar), "wide-view")); |
| 1333 gtk_widget_show_all(g_object_get_data(G_OBJECT(toolbar), "lean-view")); |
1353 gtk_widget_show_all(g_object_get_data(G_OBJECT(toolbar), "lean-view")); |
| 1334 } |
1354 } |
| 1335 } |
1355 } |
| 1336 |
1356 |
| 1337 static void gtk_imhtmltoolbar_init (GtkIMHtmlToolbar *toolbar) |
1357 static void gtk_imhtmltoolbar_init (GtkIMHtmlToolbar *toolbar) |