LauncherInspectorWindow.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. #include "LauncherInspectorWindow.h"
  26. struct _LauncherInspectorWindow {
  27. GtkWindow parent;
  28. WebKitWebInspector *inspector;
  29. GtkWidget *webView;
  30. };
  31. struct _LauncherInspectorWindowClass {
  32. GtkWindowClass parent;
  33. };
  34. G_DEFINE_TYPE(LauncherInspectorWindow, launcher_inspector_window, GTK_TYPE_WINDOW)
  35. static void launcherInspectorWindowFinalize(GObject *gObject)
  36. {
  37. LauncherInspectorWindow *inspectorWindow = LAUNCHER_INSPECTOR_WINDOW(gObject);
  38. if (inspectorWindow->inspector)
  39. g_object_unref(inspectorWindow->inspector);
  40. G_OBJECT_CLASS(launcher_inspector_window_parent_class)->finalize(gObject);
  41. }
  42. static void launcher_inspector_window_init(LauncherInspectorWindow *inspectorWindow)
  43. {
  44. gtk_window_set_title(GTK_WINDOW(inspectorWindow), "Web Inspector");
  45. gtk_window_set_default_size(GTK_WINDOW(inspectorWindow), 800, 600);
  46. }
  47. static void launcher_inspector_window_class_init(LauncherInspectorWindowClass *klass)
  48. {
  49. GObjectClass *gobjectClass = G_OBJECT_CLASS(klass);
  50. gobjectClass->finalize = launcherInspectorWindowFinalize;
  51. }
  52. static void inspectedURIChanged(WebKitWebInspector *inspector, GParamSpec *paramSpec, LauncherInspectorWindow *inspectorWindow)
  53. {
  54. gchar *title = g_strdup_printf("Web Inspector - %s", webkit_web_inspector_get_inspected_uri(inspector));
  55. gtk_window_set_title(GTK_WINDOW(inspectorWindow), title);
  56. g_free(title);
  57. }
  58. static gboolean showInspectorWindow(WebKitWebInspector *inspector, LauncherInspectorWindow *inspectorWindow)
  59. {
  60. gtk_widget_show(GTK_WIDGET(inspectorWindow));
  61. return TRUE;
  62. }
  63. static gboolean closeInspectorWindow(WebKitWebInspector *inspector, LauncherInspectorWindow *inspectorWindow)
  64. {
  65. gtk_widget_hide(GTK_WIDGET(inspectorWindow));
  66. return TRUE;
  67. }
  68. GtkWidget *launcherInspectorWindowNew(WebKitWebInspector *inspector, GtkWindow *parent)
  69. {
  70. LauncherInspectorWindow *inspectorWindow = LAUNCHER_INSPECTOR_WINDOW(g_object_new(LAUNCHER_TYPE_INSPECTOR_WINDOW, "type", GTK_WINDOW_TOPLEVEL, NULL));
  71. inspectorWindow->inspector = g_object_ref(inspector);
  72. inspectorWindow->webView = webkit_web_view_new();
  73. gtk_window_set_transient_for(GTK_WINDOW(inspectorWindow), parent);
  74. GtkWidget *scrolledWindow = gtk_scrolled_window_new(NULL, NULL);
  75. gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
  76. gtk_container_add(GTK_CONTAINER(scrolledWindow), inspectorWindow->webView);
  77. gtk_widget_show(inspectorWindow->webView);
  78. gtk_container_add(GTK_CONTAINER(inspectorWindow), scrolledWindow);
  79. gtk_widget_show(scrolledWindow);
  80. g_signal_connect(inspector, "notify::inspected-uri", G_CALLBACK(inspectedURIChanged), inspectorWindow);
  81. g_signal_connect(inspector, "show-window", G_CALLBACK(showInspectorWindow), inspectorWindow);
  82. g_signal_connect(inspector, "close-window", G_CALLBACK(closeInspectorWindow), inspectorWindow);
  83. return GTK_WIDGET(inspectorWindow);
  84. }
  85. WebKitWebView *launcherInspectorWindowGetWebView(LauncherInspectorWindow *inspectorWindow)
  86. {
  87. g_return_val_if_fail(LAUNCHER_IS_INSPECTOR_WINDOW(inspectorWindow), 0);
  88. return WEBKIT_WEB_VIEW(inspectorWindow->webView);
  89. }