Mercurial > pidgin.yaz
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 |