comparison pidgin/gtkutils.c @ 32692:0f94ec89f0bc

merged from im.pidgin.pidgin
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 26 Sep 2011 14:57:21 +0900
parents ac6353ffa129 68fe7b5211a7
children 4a34689eeb33
comparison
equal deleted inserted replaced
32438:55e678325bda 32692:0f94ec89f0bc
65 #include "gtkimhtml.h" 65 #include "gtkimhtml.h"
66 #include "gtkimhtmltoolbar.h" 66 #include "gtkimhtmltoolbar.h"
67 #include "pidginstock.h" 67 #include "pidginstock.h"
68 #include "gtkthemes.h" 68 #include "gtkthemes.h"
69 #include "gtkutils.h" 69 #include "gtkutils.h"
70 #include "gtkwebview.h"
70 #include "pidgin/minidialog.h" 71 #include "pidgin/minidialog.h"
71 72
72 typedef struct { 73 typedef struct {
73 GtkWidget *menu; 74 GtkWidget *menu;
74 gint default_item; 75 gint default_item;
264 sw = pidgin_make_scrollable(imhtml, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_NONE, -1, -1); 265 sw = pidgin_make_scrollable(imhtml, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_NONE, -1, -1);
265 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); 266 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
266 267
267 if (imhtml_ret != NULL) 268 if (imhtml_ret != NULL)
268 *imhtml_ret = imhtml; 269 *imhtml_ret = imhtml;
270
271 if (editable && (toolbar_ret != NULL))
272 *toolbar_ret = toolbar;
273
274 if (sw_ret != NULL)
275 *sw_ret = sw;
276
277 return frame;
278 }
279
280 GtkWidget *
281 pidgin_create_webview(gboolean editable, GtkWidget **webview_ret, GtkWidget **toolbar_ret, GtkWidget **sw_ret)
282 {
283 GtkWidget *frame;
284 GtkWidget *webview;
285 GtkWidget *sep;
286 GtkWidget *sw;
287 GtkWidget *toolbar = NULL;
288 GtkWidget *vbox;
289
290 frame = gtk_frame_new(NULL);
291 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
292
293 vbox = gtk_vbox_new(FALSE, 0);
294 gtk_container_add(GTK_CONTAINER(frame), vbox);
295 gtk_widget_show(vbox);
296
297 if (editable) {
298 toolbar = gtk_imhtmltoolbar_new();
299 gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
300 gtk_widget_show(toolbar);
301
302 sep = gtk_hseparator_new();
303 gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);
304 g_signal_connect_swapped(G_OBJECT(toolbar), "show", G_CALLBACK(gtk_widget_show), sep);
305 g_signal_connect_swapped(G_OBJECT(toolbar), "hide", G_CALLBACK(gtk_widget_hide), sep);
306 gtk_widget_show(sep);
307 }
308
309 webview = gtk_webview_new();
310 #if 0
311 /* TODO WEBKIT: Don't have editable webview yet. */
312 gtk_webview_set_editable(GTK_WEBVIEW(webview), editable);
313 #endif /* if 0 */
314 #ifdef USE_GTKSPELL
315 if (editable && purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/spellcheck"))
316 pidgin_setup_gtkspell(GTK_TEXT_VIEW(webview));
317 #endif
318 gtk_widget_show(webview);
319
320 if (editable) {
321 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(toolbar), webview);
322 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(toolbar), "default");
323 }
324
325 sw = pidgin_make_scrollable(webview, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_NONE, -1, -1);
326 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
327
328 gtk_webview_set_vadjustment(GTK_WEBVIEW(webview),
329 gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(sw)));
330
331 if (webview_ret != NULL)
332 *webview_ret = webview;
269 333
270 if (editable && (toolbar_ret != NULL)) 334 if (editable && (toolbar_ret != NULL))
271 *toolbar_ret = toolbar; 335 *toolbar_ret = toolbar;
272 336
273 if (sw_ret != NULL) 337 if (sw_ret != NULL)
1814 GtkWidget * 1878 GtkWidget *
1815 pidgin_append_menu_action(GtkWidget *menu, PurpleMenuAction *act, 1879 pidgin_append_menu_action(GtkWidget *menu, PurpleMenuAction *act,
1816 gpointer object) 1880 gpointer object)
1817 { 1881 {
1818 GtkWidget *menuitem; 1882 GtkWidget *menuitem;
1883 GList *list;
1819 1884
1820 if (act == NULL) { 1885 if (act == NULL) {
1821 return pidgin_separator(menu); 1886 return pidgin_separator(menu);
1822 } 1887 }
1823 1888
1824 if (act->children == NULL) { 1889 list = purple_menu_action_get_children(act);
1825 menuitem = gtk_menu_item_new_with_mnemonic(act->label); 1890 menuitem = gtk_menu_item_new_with_mnemonic(purple_menu_action_get_label(act));
1826 1891
1827 if (act->callback != NULL) { 1892 if (list == NULL) {
1893 PurpleCallback callback;
1894
1895 callback = purple_menu_action_get_callback(act);
1896
1897 if (callback != NULL) {
1828 g_object_set_data(G_OBJECT(menuitem), 1898 g_object_set_data(G_OBJECT(menuitem),
1829 "purplecallback", 1899 "purplecallback",
1830 act->callback); 1900 callback);
1831 g_object_set_data(G_OBJECT(menuitem), 1901 g_object_set_data(G_OBJECT(menuitem),
1832 "purplecallbackdata", 1902 "purplecallbackdata",
1833 act->data); 1903 purple_menu_action_get_data(act));
1834 g_signal_connect(G_OBJECT(menuitem), "activate", 1904 g_signal_connect(G_OBJECT(menuitem), "activate",
1835 G_CALLBACK(menu_action_cb), 1905 G_CALLBACK(menu_action_cb),
1836 object); 1906 object);
1837 } else { 1907 } else {
1838 gtk_widget_set_sensitive(menuitem, FALSE); 1908 gtk_widget_set_sensitive(menuitem, FALSE);
1842 } else { 1912 } else {
1843 GList *l = NULL; 1913 GList *l = NULL;
1844 GtkWidget *submenu = NULL; 1914 GtkWidget *submenu = NULL;
1845 GtkAccelGroup *group; 1915 GtkAccelGroup *group;
1846 1916
1847 menuitem = gtk_menu_item_new_with_mnemonic(act->label);
1848 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); 1917 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
1849 1918
1850 submenu = gtk_menu_new(); 1919 submenu = gtk_menu_new();
1851 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); 1920 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
1852 1921
1853 group = gtk_menu_get_accel_group(GTK_MENU(menu)); 1922 group = gtk_menu_get_accel_group(GTK_MENU(menu));
1854 if (group) { 1923 if (group) {
1855 char *path = g_strdup_printf("%s/%s", GTK_MENU_ITEM(menuitem)->accel_path, act->label); 1924 char *path = g_strdup_printf("%s/%s", GTK_MENU_ITEM(menuitem)->accel_path,
1925 purple_menu_action_get_label(act));
1856 gtk_menu_set_accel_path(GTK_MENU(submenu), path); 1926 gtk_menu_set_accel_path(GTK_MENU(submenu), path);
1857 g_free(path); 1927 g_free(path);
1858 gtk_menu_set_accel_group(GTK_MENU(submenu), group); 1928 gtk_menu_set_accel_group(GTK_MENU(submenu), group);
1859 } 1929 }
1860 1930
1861 for (l = act->children; l; l = l->next) { 1931 for (l = list; l; l = l->next) {
1862 PurpleMenuAction *act = (PurpleMenuAction *)l->data; 1932 PurpleMenuAction *act = (PurpleMenuAction *)l->data;
1863 1933
1864 pidgin_append_menu_action(submenu, act, object); 1934 pidgin_append_menu_action(submenu, act, object);
1865 } 1935 }
1866 g_list_free(act->children); 1936 g_list_free(list);
1867 act->children = NULL; 1937 purple_menu_action_set_children(act, NULL);
1868 } 1938 }
1869 purple_menu_action_free(act); 1939 purple_menu_action_free(act);
1870 return menuitem; 1940 return menuitem;
1871 } 1941 }
1872 1942