[Release] Webkit-EFL Ver. 2.0_beta_118996_0.6.24
[framework/web/webkit-efl.git] / Tools / GtkLauncher / LauncherInspectorWindow.c
1 /*
2  * Copyright (C) 2012 Igalia S.L.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "LauncherInspectorWindow.h"
27
28 struct _LauncherInspectorWindow {
29     GtkWindow parent;
30
31     WebKitWebInspector *inspector;
32     GtkWidget *webView;
33 };
34
35 struct _LauncherInspectorWindowClass {
36     GtkWindowClass parent;
37 };
38
39 G_DEFINE_TYPE(LauncherInspectorWindow, launcher_inspector_window, GTK_TYPE_WINDOW)
40
41 static void launcherInspectorWindowFinalize(GObject *gObject)
42 {
43     LauncherInspectorWindow *inspectorWindow = LAUNCHER_INSPECTOR_WINDOW(gObject);
44     if (inspectorWindow->inspector)
45         g_object_unref(inspectorWindow->inspector);
46
47     G_OBJECT_CLASS(launcher_inspector_window_parent_class)->finalize(gObject);
48 }
49
50 static void launcher_inspector_window_init(LauncherInspectorWindow *inspectorWindow)
51 {
52     gtk_window_set_title(GTK_WINDOW(inspectorWindow), "Web Inspector");
53     gtk_window_set_default_size(GTK_WINDOW(inspectorWindow), 800, 600);
54 }
55
56 static void launcher_inspector_window_class_init(LauncherInspectorWindowClass *klass)
57 {
58     GObjectClass *gobjectClass = G_OBJECT_CLASS(klass);
59     gobjectClass->finalize = launcherInspectorWindowFinalize;
60 }
61
62 static void inspectedURIChanged(WebKitWebInspector *inspector, GParamSpec *paramSpec, LauncherInspectorWindow *inspectorWindow)
63 {
64     gchar *title = g_strdup_printf("Web Inspector - %s", webkit_web_inspector_get_inspected_uri(inspector));
65     gtk_window_set_title(GTK_WINDOW(inspectorWindow), title);
66     g_free(title);
67 }
68
69 static gboolean showInspectorWindow(WebKitWebInspector *inspector, LauncherInspectorWindow *inspectorWindow)
70 {
71     gtk_widget_show(GTK_WIDGET(inspectorWindow));
72     return TRUE;
73 }
74
75 static gboolean closeInspectorWindow(WebKitWebInspector *inspector, LauncherInspectorWindow *inspectorWindow)
76 {
77     gtk_widget_hide(GTK_WIDGET(inspectorWindow));
78     return TRUE;
79 }
80
81 GtkWidget *launcherInspectorWindowNew(WebKitWebInspector *inspector, GtkWindow *parent)
82 {
83     LauncherInspectorWindow *inspectorWindow = LAUNCHER_INSPECTOR_WINDOW(g_object_new(LAUNCHER_TYPE_INSPECTOR_WINDOW, "type", GTK_WINDOW_TOPLEVEL, NULL));
84     inspectorWindow->inspector = g_object_ref(inspector);
85     inspectorWindow->webView = webkit_web_view_new();
86     gtk_window_set_transient_for(GTK_WINDOW(inspectorWindow), parent);
87
88     GtkWidget *scrolledWindow = gtk_scrolled_window_new(NULL, NULL);
89     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
90     gtk_container_add(GTK_CONTAINER(scrolledWindow), inspectorWindow->webView);
91     gtk_widget_show(inspectorWindow->webView);
92
93     gtk_container_add(GTK_CONTAINER(inspectorWindow), scrolledWindow);
94     gtk_widget_show(scrolledWindow);
95
96     g_signal_connect(inspector, "notify::inspected-uri", G_CALLBACK(inspectedURIChanged), inspectorWindow);
97     g_signal_connect(inspector, "show-window", G_CALLBACK(showInspectorWindow), inspectorWindow);
98     g_signal_connect(inspector, "close-window", G_CALLBACK(closeInspectorWindow), inspectorWindow);
99
100     return GTK_WIDGET(inspectorWindow);
101 }
102
103 WebKitWebView *launcherInspectorWindowGetWebView(LauncherInspectorWindow *inspectorWindow)
104 {
105     g_return_val_if_fail(LAUNCHER_IS_INSPECTOR_WINDOW(inspectorWindow), 0);
106
107     return WEBKIT_WEB_VIEW(inspectorWindow->webView);
108 }