Mercurial > pidgin.yaz
view pidgin/plugins/webkit.c @ 32619:17c27a527004
Add some boilerplate Conversation theme GObjects. These don't do
anything yet, and aren't used either.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Sat, 17 Sep 2011 05:27:30 +0000 |
parents | d478be29444a |
children | afd256914830 |
line wrap: on
line source
/* * WebKit - Open the inspector on any WebKit views. * Copyright (C) 2011 Elliott Sales de Andrade <qulogic@pidgin.im> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301, USA. */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include "internal.h" #include "version.h" #include "pidgin.h" #include "gtkconv.h" #include "gtkplugin.h" #include "gtkwebview.h" static WebKitWebView * create_gtk_window_around_it(WebKitWebInspector *inspector, WebKitWebView *webview, PidginConversation *gtkconv) { GtkWidget *win; GtkWidget *view; char *title; win = gtk_window_new(GTK_WINDOW_TOPLEVEL); title = g_strdup_printf(_("%s - Inspector"), gtk_label_get_text(GTK_LABEL(gtkconv->tab_label))); gtk_window_set_title(GTK_WINDOW(win), title); g_free(title); gtk_window_set_default_size(GTK_WINDOW(win), 600, 400); view = webkit_web_view_new(); gtk_container_add(GTK_CONTAINER(win), view); g_object_set_data(G_OBJECT(webview), "inspector-window", win); return WEBKIT_WEB_VIEW(view); } static gboolean show_inspector_window(WebKitWebInspector *inspector, GtkWidget *webview) { GtkWidget *win; win = g_object_get_data(G_OBJECT(webview), "inspector-window"); gtk_widget_show_all(win); return TRUE; } static void setup_inspector(PidginConversation *gtkconv) { GtkWidget *webview = gtkconv->webview; WebKitWebSettings *settings; WebKitWebInspector *inspector; settings = webkit_web_view_get_settings(WEBKIT_WEB_VIEW(webview)); inspector = webkit_web_view_get_inspector(WEBKIT_WEB_VIEW(webview)); g_object_set(G_OBJECT(settings), "enable-developer-extras", TRUE, NULL); g_signal_connect(G_OBJECT(inspector), "inspect-web-view", G_CALLBACK(create_gtk_window_around_it), gtkconv); g_signal_connect(G_OBJECT(inspector), "show-window", G_CALLBACK(show_inspector_window), webview); } static void remove_inspector(PidginConversation *gtkconv) { GtkWidget *webview = gtkconv->webview; GtkWidget *win; WebKitWebSettings *settings; WebKitWebInspector *inspector; win = g_object_get_data(G_OBJECT(webview), "inspector-window"); gtk_widget_destroy(win); g_object_set_data(G_OBJECT(webview), "inspector-window", NULL); settings = webkit_web_view_get_settings(WEBKIT_WEB_VIEW(webview)); inspector = webkit_web_view_get_inspector(WEBKIT_WEB_VIEW(webview)); g_object_set(G_OBJECT(settings), "enable-developer-extras", FALSE, NULL); } static void conversation_displayed_cb(PidginConversation *gtkconv) { GtkWidget *inspect = NULL; inspect = g_object_get_data(G_OBJECT(gtkconv->webview), "inspector-window"); if (inspect == NULL) { setup_inspector(gtkconv); } } static gboolean plugin_load(PurplePlugin *plugin) { GList *convs = purple_get_conversations(); void *gtk_conv_handle = pidgin_conversations_get_handle(); purple_signal_connect(gtk_conv_handle, "conversation-displayed", plugin, PURPLE_CALLBACK(conversation_displayed_cb), NULL); while (convs) { PurpleConversation *conv = (PurpleConversation *)convs->data; /* Setup WebKit Inspector */ if (PIDGIN_IS_PIDGIN_CONVERSATION(conv)) { setup_inspector(PIDGIN_CONVERSATION(conv)); } convs = convs->next; } return TRUE; } static gboolean plugin_unload(PurplePlugin *plugin) { GList *convs = purple_get_conversations(); while (convs) { PurpleConversation *conv = (PurpleConversation *)convs->data; /* Remove WebKit Inspector */ if (PIDGIN_IS_PIDGIN_CONVERSATION(conv)) { remove_inspector(PIDGIN_CONVERSATION(conv)); } convs = convs->next; } return TRUE; } static PurplePluginInfo info = { PURPLE_PLUGIN_MAGIC, PURPLE_MAJOR_VERSION, /**< major version */ PURPLE_MINOR_VERSION, /**< minor version */ PURPLE_PLUGIN_STANDARD, /**< type */ PIDGIN_PLUGIN_TYPE, /**< ui_requirement */ 0, /**< flags */ NULL, /**< dependencies */ PURPLE_PRIORITY_DEFAULT, /**< priority */ "gtkwebkit-inspect", /**< id */ N_("WebKit Development"), /**< name */ DISPLAY_VERSION, /**< version */ N_("Enables WebKit Inspector."), /**< summary */ N_("Enables WebKit's built-in inspector in a " "conversation window. This may be viewed " "by right-clicking a WebKit widget and " "selecting 'Inspect Element'."), /**< description */ "Elliott Sales de Andrade <qulogic@pidgin.im>", /**< author */ PURPLE_WEBSITE, /**< homepage */ plugin_load, /**< load */ plugin_unload, /**< unload */ NULL, /**< destroy */ NULL, /**< ui_info */ NULL, /**< extra_info */ NULL, /**< prefs_info */ NULL, /**< actions */ /* padding */ NULL, NULL, NULL, NULL }; static void init_plugin(PurplePlugin *plugin) { } PURPLE_INIT_PLUGIN(webkit-devel, init_plugin, info)