]> git.0d.be Git - empathy.git/commitdiff
EmpathyCallWindowFullscreen -> EmpathyStreamedMediaFullscreen
authorEmilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
Thu, 3 Feb 2011 14:03:26 +0000 (14:03 +0000)
committerEmilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
Thu, 3 Feb 2011 15:00:33 +0000 (15:00 +0000)
src/Makefile.am
src/empathy-call-window-fullscreen.c [deleted file]
src/empathy-call-window-fullscreen.h [deleted file]
src/empathy-streamed-media-window-fullscreen.c [new file with mode: 0644]
src/empathy-streamed-media-window-fullscreen.h [new file with mode: 0644]
src/empathy-streamed-media-window.c

index b776290389fd3ecc2177845b29d41d68b3e98bd0..72cc541dff5e63595ae01ef0a68bc8af193bad70 100644 (file)
@@ -102,7 +102,7 @@ empathy_debugger_SOURCES =                                          \
 
 empathy_handwritten_av_source = \
        empathy-av.c \
-       empathy-call-window-fullscreen.c empathy-call-window-fullscreen.h \
+       empathy-streamed-media-window-fullscreen.c empathy-streamed-media-window-fullscreen.h   \
        empathy-streamed-media-window.c empathy-streamed-media-window.h \
        $(NULL)
 
diff --git a/src/empathy-call-window-fullscreen.c b/src/empathy-call-window-fullscreen.c
deleted file mode 100644 (file)
index dad0b46..0000000
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * empathy-call-window-fullscreen.c - Source for EmpathyCallWindowFullscreen
- * Copyright (C) 2009 Collabora Ltd.
- *
- * Some code is based on the Totem Movie Player, especially
- * totem-fullscreen.c which has the following copyright:
- * Copyright (C) 2001-2007 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2007 Sunil Mohan Adapa <sunilmohan@gnu.org.in>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#include "empathy-call-window-fullscreen.h"
-
-#include <gtk/gtk.h>
-
-#include <libempathy/empathy-utils.h>
-#include <libempathy-gtk/empathy-ui-utils.h>
-
-/* The number of seconds for which the "leave fullscreen" popup should
-   be shown */
-#define FULLSCREEN_POPUP_TIMEOUT 5
-
-G_DEFINE_TYPE (EmpathyCallWindowFullscreen, empathy_call_window_fullscreen,
-    G_TYPE_OBJECT)
-
-/* private structure */
-typedef struct _EmpathyCallWindowFullscreenPriv
-    EmpathyCallWindowFullscreenPriv;
-
-struct _EmpathyCallWindowFullscreenPriv
-{
-  EmpathyStreamedMediaWindow *parent_window;
-
-  GtkWidget *leave_fullscreen_popup;
-  GtkWidget *video_widget;
-
-  guint popup_timeout;
-  gboolean popup_creation_in_progress;
-  gboolean dispose_has_run;
-};
-
-#define GET_PRIV(o) \
-  (G_TYPE_INSTANCE_GET_PRIVATE ((o), EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN, \
-    EmpathyCallWindowFullscreenPriv))
-
-static void empathy_call_window_fullscreen_dispose (GObject *object);
-static void empathy_call_window_fullscreen_finalize (GObject *object);
-
-static gboolean empathy_call_window_fullscreen_hide_popup (
-    EmpathyCallWindowFullscreen *fs);
-
-static void
-empathy_call_window_fullscreen_set_cursor_visible (
-    EmpathyCallWindowFullscreen *fs,
-    gboolean show_cursor)
-{
-  EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (fs);
-  GdkWindow *window;
-
-  if (priv->video_widget == NULL)
-    return;
-
-  window = gtk_widget_get_window (priv->video_widget);
-
-  if (!show_cursor)
-    gdk_window_set_cursor (window, gdk_cursor_new (GDK_BLANK_CURSOR));
-  else
-    gdk_window_set_cursor (window, NULL);
-}
-
-static void
-empathy_call_window_fullscreen_add_popup_timeout (
-    EmpathyCallWindowFullscreen *self)
-{
-  EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
-
-  if (priv->popup_timeout == 0)
-    {
-      priv->popup_timeout = g_timeout_add_seconds (FULLSCREEN_POPUP_TIMEOUT,
-          (GSourceFunc) empathy_call_window_fullscreen_hide_popup, self);
-    }
-}
-
-static void
-empathy_call_window_fullscreen_remove_popup_timeout (
-    EmpathyCallWindowFullscreen *self)
-{
-  EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
-
-  if (priv->popup_timeout != 0)
-    {
-      g_source_remove (priv->popup_timeout);
-      priv->popup_timeout = 0;
-    }
-}
-
-void
-empathy_call_window_fullscreen_show_popup (EmpathyCallWindowFullscreen *self)
-{
-  gint leave_fullscreen_width, leave_fullscreen_height;
-  GdkScreen *screen;
-  GdkRectangle fullscreen_rect;
-  EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
-
-  g_assert (self->is_fullscreen);
-
-  g_return_if_fail (priv->parent_window != NULL);
-
-  if (priv->popup_creation_in_progress)
-    return;
-
-  if (!gtk_window_is_active (GTK_WINDOW (priv->parent_window)))
-    return;
-
-  priv->popup_creation_in_progress = TRUE;
-
-  empathy_call_window_fullscreen_set_cursor_visible (self, TRUE);
-
-  /* Obtaining the screen rectangle */
-  screen = gtk_window_get_screen (GTK_WINDOW (priv->parent_window));
-  gdk_screen_get_monitor_geometry (screen,
-      gdk_screen_get_monitor_at_window (screen,
-          gtk_widget_get_window (GTK_WIDGET (priv->parent_window))),
-      &fullscreen_rect);
-
-  /* Getting the popup window sizes */
-  gtk_window_get_size (GTK_WINDOW (priv->leave_fullscreen_popup),
-      &leave_fullscreen_width, &leave_fullscreen_height);
-
-  /* Moving the popup to the top-right corner (if the direction is LTR) or the
-     top-left corner (if the direction is RTL).*/
-  if (gtk_widget_get_direction (priv->leave_fullscreen_popup)
-        == GTK_TEXT_DIR_LTR)
-    {
-      gtk_window_move (GTK_WINDOW (priv->leave_fullscreen_popup),
-          fullscreen_rect.width + fullscreen_rect.x - leave_fullscreen_width,
-          fullscreen_rect.y);
-
-    }
-  else
-    {
-      gtk_window_move (GTK_WINDOW (priv->leave_fullscreen_popup),
-          fullscreen_rect.x, fullscreen_rect.y);
-    }
-
-  gtk_widget_show_all (priv->leave_fullscreen_popup);
-  empathy_call_window_fullscreen_add_popup_timeout (self);
-
-  priv->popup_creation_in_progress = FALSE;
-}
-
-static gboolean
-empathy_call_window_fullscreen_hide_popup (EmpathyCallWindowFullscreen *fs)
-{
-  EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (fs);
-
-  if (priv->video_widget == NULL || !fs->is_fullscreen)
-    return TRUE;
-
-  gtk_widget_hide (priv->leave_fullscreen_popup);
-  empathy_call_window_fullscreen_remove_popup_timeout (fs);
-
-  empathy_call_window_fullscreen_set_cursor_visible (fs, FALSE);
-
-  return FALSE;
-}
-
-static void
-empathy_call_window_fullscreen_init (EmpathyCallWindowFullscreen *self)
-{
-  EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
-  GtkBuilder *gui;
-  gchar *filename;
-
-  filename = empathy_file_lookup ("empathy-call-window-fullscreen.ui", "src");
-  gui = empathy_builder_get_file (filename,
-    "leave_fullscreen_window", &priv->leave_fullscreen_popup,
-    "leave_fullscreen_button", &self->leave_fullscreen_button,
-    NULL);
-
-  gtk_widget_add_events (priv->leave_fullscreen_popup, GDK_POINTER_MOTION_MASK);
-
-  g_object_unref (gui);
-  g_free (filename);
-}
-
-static void
-empathy_call_window_fullscreen_class_init (
-    EmpathyCallWindowFullscreenClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-  g_type_class_add_private (klass, sizeof (EmpathyCallWindowFullscreenPriv));
-
-  object_class->dispose = empathy_call_window_fullscreen_dispose;
-  object_class->finalize = empathy_call_window_fullscreen_finalize;
-}
-
-void
-empathy_call_window_fullscreen_dispose (GObject *object)
-{
-  EmpathyCallWindowFullscreen *self = EMPATHY_CALL_WINDOW_FULLSCREEN (object);
-  EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
-
-  if (priv->dispose_has_run)
-    return;
-
-  priv->dispose_has_run = TRUE;
-
-  if (priv->leave_fullscreen_popup != NULL)
-    gtk_widget_destroy (priv->leave_fullscreen_popup);
-  priv->leave_fullscreen_popup = NULL;
-
-  if (G_OBJECT_CLASS (empathy_call_window_fullscreen_parent_class)->dispose)
-    {
-      G_OBJECT_CLASS (
-          empathy_call_window_fullscreen_parent_class)->dispose (object);
-    }
-}
-
-void
-empathy_call_window_fullscreen_finalize (GObject *object)
-{
-  EmpathyCallWindowFullscreen *self = EMPATHY_CALL_WINDOW_FULLSCREEN (object);
-
-  empathy_call_window_fullscreen_remove_popup_timeout (self);
-
-  G_OBJECT_CLASS (
-      empathy_call_window_fullscreen_parent_class)->finalize (object);
-}
-
-static void
-empathy_call_window_fullscreen_parent_window_notify (GtkWidget *parent_window,
-    GParamSpec *property, EmpathyCallWindowFullscreen *fs)
-{
-  EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (fs);
-
-  if (!fs->is_fullscreen)
-    return;
-
-  if (parent_window == GTK_WIDGET (priv->parent_window) &&
-        !gtk_window_is_active (GTK_WINDOW (parent_window)))
-    {
-      empathy_call_window_fullscreen_hide_popup (fs);
-      empathy_call_window_fullscreen_set_cursor_visible (fs, TRUE);
-    }
-}
-
-EmpathyCallWindowFullscreen *
-empathy_call_window_fullscreen_new (EmpathyStreamedMediaWindow *parent_window)
-{
-  EmpathyCallWindowFullscreen *self = EMPATHY_CALL_WINDOW_FULLSCREEN (
-    g_object_new (EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN, NULL));
-  EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
-
-  priv->parent_window = parent_window;
-  g_signal_connect (G_OBJECT (priv->parent_window), "notify::is-active",
-    G_CALLBACK (empathy_call_window_fullscreen_parent_window_notify), self);
-
-  return self;
-}
-
-void
-empathy_call_window_fullscreen_set_fullscreen (EmpathyCallWindowFullscreen *fs,
-  gboolean set_fullscreen)
-{
-
-  if (set_fullscreen)
-      empathy_call_window_fullscreen_remove_popup_timeout (fs);
-  else
-      empathy_call_window_fullscreen_hide_popup (fs);
-
-  empathy_call_window_fullscreen_set_cursor_visible (fs, !set_fullscreen);
-  fs->is_fullscreen = set_fullscreen;
-}
-
-static void
-video_widget_destroy_cb (GtkWidget *widget,
-    EmpathyCallWindowFullscreen *self)
-{
-  EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
-
-  priv->video_widget = NULL;
-}
-
-void
-empathy_call_window_fullscreen_set_video_widget (
-    EmpathyCallWindowFullscreen *fs,
-    GtkWidget *video_widget)
-{
-  EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (fs);
-  priv->video_widget = video_widget;
-
-  tp_g_signal_connect_object (video_widget, "destroy",
-      G_CALLBACK (video_widget_destroy_cb), fs, 0);
-}
diff --git a/src/empathy-call-window-fullscreen.h b/src/empathy-call-window-fullscreen.h
deleted file mode 100644 (file)
index 967a524..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * empathy-call-window-fullscreen.h - Header for EmpathyCallWindowFullscreen
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-#ifndef __EMPATHY_CALL_WINDOW_FULLSCREEN_H__
-#define __EMPATHY_CALL_WINDOW_FULLSCREEN_H__
-
-#include <glib-object.h>
-#include <gtk/gtk.h>
-
-#include "empathy-streamed-media-window.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyCallWindowFullscreen EmpathyCallWindowFullscreen;
-typedef struct _EmpathyCallWindowFullscreenClass
-    EmpathyCallWindowFullscreenClass;
-
-struct _EmpathyCallWindowFullscreenClass {
-  GObjectClass parent_class;
-};
-
-struct _EmpathyCallWindowFullscreen {
-  GObject parent;
-  gboolean is_fullscreen;
-  GtkWidget *leave_fullscreen_button;
-};
-
-GType empathy_call_window_fullscreen_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN \
-  (empathy_call_window_fullscreen_get_type ())
-#define EMPATHY_CALL_WINDOW_FULLSCREEN(obj) \
-  (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN, \
-    EmpathyCallWindowFullscreen))
-#define EMPATHY_CALL_WINDOW_FULLSCREEN_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN, \
-    EmpathyCallWindowClassFullscreen))
-#define EMPATHY_IS_CALL_WINDOW_FULLSCREEN(obj) \
-  (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN))
-#define EMPATHY_IS_CALL_WINDOW_FULLSCREEN_CLASS(klass) \
-  (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN))
-#define EMPATHY_CALL_WINDOW_FULLSCREEN_GET_CLASS(obj) \
-  (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN, \
-    EmpathyCallWindowFullscreenClass))
-
-EmpathyCallWindowFullscreen *empathy_call_window_fullscreen_new (
-    EmpathyStreamedMediaWindow *parent);
-
-void empathy_call_window_fullscreen_set_fullscreen (
-    EmpathyCallWindowFullscreen *fs,
-    gboolean set_fullscreen);
-void empathy_call_window_fullscreen_set_video_widget (
-    EmpathyCallWindowFullscreen *fs,
-    GtkWidget *video_widget);
-void empathy_call_window_fullscreen_show_popup (
-    EmpathyCallWindowFullscreen *fs);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_CALL_WINDOW_FULLSCREEN_H__*/
diff --git a/src/empathy-streamed-media-window-fullscreen.c b/src/empathy-streamed-media-window-fullscreen.c
new file mode 100644 (file)
index 0000000..caa34ff
--- /dev/null
@@ -0,0 +1,309 @@
+/*
+ * empathy-streamed-media-window-fullscreen.c - Source for EmpathyStreamedMediaWindowFullscreen
+ * Copyright (C) 2009 Collabora Ltd.
+ *
+ * Some code is based on the Totem Movie Player, especially
+ * totem-fullscreen.c which has the following copyright:
+ * Copyright (C) 2001-2007 Bastien Nocera <hadess@hadess.net>
+ * Copyright (C) 2007 Sunil Mohan Adapa <sunilmohan@gnu.org.in>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include "empathy-streamed-media-window-fullscreen.h"
+
+#include <gtk/gtk.h>
+
+#include <libempathy/empathy-utils.h>
+#include <libempathy-gtk/empathy-ui-utils.h>
+
+/* The number of seconds for which the "leave fullscreen" popup should
+   be shown */
+#define FULLSCREEN_POPUP_TIMEOUT 5
+
+G_DEFINE_TYPE (EmpathyStreamedMediaWindowFullscreen, empathy_streamed_media_window_fullscreen,
+    G_TYPE_OBJECT)
+
+/* private structure */
+typedef struct _EmpathyStreamedMediaWindowFullscreenPriv
+    EmpathyStreamedMediaWindowFullscreenPriv;
+
+struct _EmpathyStreamedMediaWindowFullscreenPriv
+{
+  EmpathyStreamedMediaWindow *parent_window;
+
+  GtkWidget *leave_fullscreen_popup;
+  GtkWidget *video_widget;
+
+  guint popup_timeout;
+  gboolean popup_creation_in_progress;
+  gboolean dispose_has_run;
+};
+
+#define GET_PRIV(o) \
+  (G_TYPE_INSTANCE_GET_PRIVATE ((o), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN, \
+    EmpathyStreamedMediaWindowFullscreenPriv))
+
+static void empathy_streamed_media_window_fullscreen_dispose (GObject *object);
+static void empathy_streamed_media_window_fullscreen_finalize (GObject *object);
+
+static gboolean empathy_streamed_media_window_fullscreen_hide_popup (
+    EmpathyStreamedMediaWindowFullscreen *fs);
+
+static void
+empathy_streamed_media_window_fullscreen_set_cursor_visible (
+    EmpathyStreamedMediaWindowFullscreen *fs,
+    gboolean show_cursor)
+{
+  EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (fs);
+  GdkWindow *window;
+
+  if (priv->video_widget == NULL)
+    return;
+
+  window = gtk_widget_get_window (priv->video_widget);
+
+  if (!show_cursor)
+    gdk_window_set_cursor (window, gdk_cursor_new (GDK_BLANK_CURSOR));
+  else
+    gdk_window_set_cursor (window, NULL);
+}
+
+static void
+empathy_streamed_media_window_fullscreen_add_popup_timeout (
+    EmpathyStreamedMediaWindowFullscreen *self)
+{
+  EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
+
+  if (priv->popup_timeout == 0)
+    {
+      priv->popup_timeout = g_timeout_add_seconds (FULLSCREEN_POPUP_TIMEOUT,
+          (GSourceFunc) empathy_streamed_media_window_fullscreen_hide_popup, self);
+    }
+}
+
+static void
+empathy_streamed_media_window_fullscreen_remove_popup_timeout (
+    EmpathyStreamedMediaWindowFullscreen *self)
+{
+  EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
+
+  if (priv->popup_timeout != 0)
+    {
+      g_source_remove (priv->popup_timeout);
+      priv->popup_timeout = 0;
+    }
+}
+
+void
+empathy_streamed_media_window_fullscreen_show_popup (EmpathyStreamedMediaWindowFullscreen *self)
+{
+  gint leave_fullscreen_width, leave_fullscreen_height;
+  GdkScreen *screen;
+  GdkRectangle fullscreen_rect;
+  EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
+
+  g_assert (self->is_fullscreen);
+
+  g_return_if_fail (priv->parent_window != NULL);
+
+  if (priv->popup_creation_in_progress)
+    return;
+
+  if (!gtk_window_is_active (GTK_WINDOW (priv->parent_window)))
+    return;
+
+  priv->popup_creation_in_progress = TRUE;
+
+  empathy_streamed_media_window_fullscreen_set_cursor_visible (self, TRUE);
+
+  /* Obtaining the screen rectangle */
+  screen = gtk_window_get_screen (GTK_WINDOW (priv->parent_window));
+  gdk_screen_get_monitor_geometry (screen,
+      gdk_screen_get_monitor_at_window (screen,
+          gtk_widget_get_window (GTK_WIDGET (priv->parent_window))),
+      &fullscreen_rect);
+
+  /* Getting the popup window sizes */
+  gtk_window_get_size (GTK_WINDOW (priv->leave_fullscreen_popup),
+      &leave_fullscreen_width, &leave_fullscreen_height);
+
+  /* Moving the popup to the top-right corner (if the direction is LTR) or the
+     top-left corner (if the direction is RTL).*/
+  if (gtk_widget_get_direction (priv->leave_fullscreen_popup)
+        == GTK_TEXT_DIR_LTR)
+    {
+      gtk_window_move (GTK_WINDOW (priv->leave_fullscreen_popup),
+          fullscreen_rect.width + fullscreen_rect.x - leave_fullscreen_width,
+          fullscreen_rect.y);
+
+    }
+  else
+    {
+      gtk_window_move (GTK_WINDOW (priv->leave_fullscreen_popup),
+          fullscreen_rect.x, fullscreen_rect.y);
+    }
+
+  gtk_widget_show_all (priv->leave_fullscreen_popup);
+  empathy_streamed_media_window_fullscreen_add_popup_timeout (self);
+
+  priv->popup_creation_in_progress = FALSE;
+}
+
+static gboolean
+empathy_streamed_media_window_fullscreen_hide_popup (EmpathyStreamedMediaWindowFullscreen *fs)
+{
+  EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (fs);
+
+  if (priv->video_widget == NULL || !fs->is_fullscreen)
+    return TRUE;
+
+  gtk_widget_hide (priv->leave_fullscreen_popup);
+  empathy_streamed_media_window_fullscreen_remove_popup_timeout (fs);
+
+  empathy_streamed_media_window_fullscreen_set_cursor_visible (fs, FALSE);
+
+  return FALSE;
+}
+
+static void
+empathy_streamed_media_window_fullscreen_init (EmpathyStreamedMediaWindowFullscreen *self)
+{
+  EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
+  GtkBuilder *gui;
+  gchar *filename;
+
+  filename = empathy_file_lookup ("empathy-call-window-fullscreen.ui", "src");
+  gui = empathy_builder_get_file (filename,
+    "leave_fullscreen_window", &priv->leave_fullscreen_popup,
+    "leave_fullscreen_button", &self->leave_fullscreen_button,
+    NULL);
+
+  gtk_widget_add_events (priv->leave_fullscreen_popup, GDK_POINTER_MOTION_MASK);
+
+  g_object_unref (gui);
+  g_free (filename);
+}
+
+static void
+empathy_streamed_media_window_fullscreen_class_init (
+    EmpathyStreamedMediaWindowFullscreenClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  g_type_class_add_private (klass, sizeof (EmpathyStreamedMediaWindowFullscreenPriv));
+
+  object_class->dispose = empathy_streamed_media_window_fullscreen_dispose;
+  object_class->finalize = empathy_streamed_media_window_fullscreen_finalize;
+}
+
+void
+empathy_streamed_media_window_fullscreen_dispose (GObject *object)
+{
+  EmpathyStreamedMediaWindowFullscreen *self = EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN (object);
+  EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
+
+  if (priv->dispose_has_run)
+    return;
+
+  priv->dispose_has_run = TRUE;
+
+  if (priv->leave_fullscreen_popup != NULL)
+    gtk_widget_destroy (priv->leave_fullscreen_popup);
+  priv->leave_fullscreen_popup = NULL;
+
+  if (G_OBJECT_CLASS (empathy_streamed_media_window_fullscreen_parent_class)->dispose)
+    {
+      G_OBJECT_CLASS (
+          empathy_streamed_media_window_fullscreen_parent_class)->dispose (object);
+    }
+}
+
+void
+empathy_streamed_media_window_fullscreen_finalize (GObject *object)
+{
+  EmpathyStreamedMediaWindowFullscreen *self = EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN (object);
+
+  empathy_streamed_media_window_fullscreen_remove_popup_timeout (self);
+
+  G_OBJECT_CLASS (
+      empathy_streamed_media_window_fullscreen_parent_class)->finalize (object);
+}
+
+static void
+empathy_streamed_media_window_fullscreen_parent_window_notify (GtkWidget *parent_window,
+    GParamSpec *property, EmpathyStreamedMediaWindowFullscreen *fs)
+{
+  EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (fs);
+
+  if (!fs->is_fullscreen)
+    return;
+
+  if (parent_window == GTK_WIDGET (priv->parent_window) &&
+        !gtk_window_is_active (GTK_WINDOW (parent_window)))
+    {
+      empathy_streamed_media_window_fullscreen_hide_popup (fs);
+      empathy_streamed_media_window_fullscreen_set_cursor_visible (fs, TRUE);
+    }
+}
+
+EmpathyStreamedMediaWindowFullscreen *
+empathy_streamed_media_window_fullscreen_new (EmpathyStreamedMediaWindow *parent_window)
+{
+  EmpathyStreamedMediaWindowFullscreen *self = EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN (
+    g_object_new (EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN, NULL));
+  EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
+
+  priv->parent_window = parent_window;
+  g_signal_connect (G_OBJECT (priv->parent_window), "notify::is-active",
+    G_CALLBACK (empathy_streamed_media_window_fullscreen_parent_window_notify), self);
+
+  return self;
+}
+
+void
+empathy_streamed_media_window_fullscreen_set_fullscreen (EmpathyStreamedMediaWindowFullscreen *fs,
+  gboolean set_fullscreen)
+{
+
+  if (set_fullscreen)
+      empathy_streamed_media_window_fullscreen_remove_popup_timeout (fs);
+  else
+      empathy_streamed_media_window_fullscreen_hide_popup (fs);
+
+  empathy_streamed_media_window_fullscreen_set_cursor_visible (fs, !set_fullscreen);
+  fs->is_fullscreen = set_fullscreen;
+}
+
+static void
+video_widget_destroy_cb (GtkWidget *widget,
+    EmpathyStreamedMediaWindowFullscreen *self)
+{
+  EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (self);
+
+  priv->video_widget = NULL;
+}
+
+void
+empathy_streamed_media_window_fullscreen_set_video_widget (
+    EmpathyStreamedMediaWindowFullscreen *fs,
+    GtkWidget *video_widget)
+{
+  EmpathyStreamedMediaWindowFullscreenPriv *priv = GET_PRIV (fs);
+  priv->video_widget = video_widget;
+
+  tp_g_signal_connect_object (video_widget, "destroy",
+      G_CALLBACK (video_widget_destroy_cb), fs, 0);
+}
diff --git a/src/empathy-streamed-media-window-fullscreen.h b/src/empathy-streamed-media-window-fullscreen.h
new file mode 100644 (file)
index 0000000..bdb95fb
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * empathy-streamed-media-window-fullscreen.h - Header for EmpathyStreamedMediaWindowFullscreen
+ * Copyright (C) 2009 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef __EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN_H__
+#define __EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN_H__
+
+#include <glib-object.h>
+#include <gtk/gtk.h>
+
+#include "empathy-streamed-media-window.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EmpathyStreamedMediaWindowFullscreen EmpathyStreamedMediaWindowFullscreen;
+typedef struct _EmpathyStreamedMediaWindowFullscreenClass
+    EmpathyStreamedMediaWindowFullscreenClass;
+
+struct _EmpathyStreamedMediaWindowFullscreenClass {
+  GObjectClass parent_class;
+};
+
+struct _EmpathyStreamedMediaWindowFullscreen {
+  GObject parent;
+  gboolean is_fullscreen;
+  GtkWidget *leave_fullscreen_button;
+};
+
+GType empathy_streamed_media_window_fullscreen_get_type (void);
+
+/* TYPE MACROS */
+#define EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN \
+  (empathy_streamed_media_window_fullscreen_get_type ())
+#define EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN, \
+    EmpathyStreamedMediaWindowFullscreen))
+#define EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN, \
+    EmpathyStreamedMediaWindowClassFullscreen))
+#define EMPATHY_IS_STREAMED_MEDIA_WINDOW_FULLSCREEN(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN))
+#define EMPATHY_IS_STREAMED_MEDIA_WINDOW_FULLSCREEN_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN))
+#define EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_STREAMED_MEDIA_WINDOW_FULLSCREEN, \
+    EmpathyStreamedMediaWindowFullscreenClass))
+
+EmpathyStreamedMediaWindowFullscreen *empathy_streamed_media_window_fullscreen_new (
+    EmpathyStreamedMediaWindow *parent);
+
+void empathy_streamed_media_window_fullscreen_set_fullscreen (
+    EmpathyStreamedMediaWindowFullscreen *fs,
+    gboolean set_fullscreen);
+void empathy_streamed_media_window_fullscreen_set_video_widget (
+    EmpathyStreamedMediaWindowFullscreen *fs,
+    GtkWidget *video_widget);
+void empathy_streamed_media_window_fullscreen_show_popup (
+    EmpathyStreamedMediaWindowFullscreen *fs);
+
+G_END_DECLS
+
+#endif /* #ifndef __EMPATHY_STREAMED_MEDIA_WINDOW_FULLSCREEN_H__*/
index 7ccca4c1d298364fec26af6a4b82418b5b0bf415..c324d45c06941e3cc559404c670caaeac3c77954 100644 (file)
@@ -52,7 +52,7 @@
 #include <libempathy/empathy-debug.h>
 
 #include "empathy-streamed-media-window.h"
-#include "empathy-call-window-fullscreen.h"
+#include "empathy-streamed-media-window-fullscreen.h"
 #include "ev-sidebar.h"
 
 #define BUTTON_ID "empathy-call-dtmf-button-id"
@@ -207,7 +207,7 @@ struct _EmpathyStreamedMediaWindowPriv
   gboolean sending_video;
   CameraState camera_state;
 
-  EmpathyCallWindowFullscreen *fullscreen;
+  EmpathyStreamedMediaWindowFullscreen *fullscreen;
   gboolean is_fullscreen;
 
   /* Those fields represent the state of the window before it actually was in
@@ -255,10 +255,10 @@ static void empathy_streamed_media_window_sidebar_shown_cb (EvSidebar *sidebar,
 static void empathy_streamed_media_window_hangup_cb (gpointer object,
   EmpathyStreamedMediaWindow *window);
 
-static void empathy_call_window_fullscreen_cb (gpointer object,
+static void empathy_streamed_media_window_fullscreen_cb (gpointer object,
   EmpathyStreamedMediaWindow *window);
 
-static void empathy_call_window_fullscreen_toggle (EmpathyStreamedMediaWindow *window);
+static void empathy_streamed_media_window_fullscreen_toggle (EmpathyStreamedMediaWindow *window);
 
 static gboolean empathy_streamed_media_window_video_button_press_cb (
   GtkWidget *video_output, GdkEventButton *event, EmpathyStreamedMediaWindow *window);
@@ -1078,7 +1078,7 @@ empathy_streamed_media_window_init (EmpathyStreamedMediaWindow *self)
     "menuredial", "activate", empathy_streamed_media_window_redial_cb,
     "redial", "clicked", empathy_streamed_media_window_redial_cb,
     "microphone", "toggled", empathy_streamed_media_window_mic_toggled_cb,
-    "menufullscreen", "activate", empathy_call_window_fullscreen_cb,
+    "menufullscreen", "activate", empathy_streamed_media_window_fullscreen_cb,
     "camera_off", "toggled", tool_button_camera_off_toggled_cb,
     "camera_preview", "toggled", tool_button_camera_preview_toggled_cb,
     "camera_on", "toggled", tool_button_camera_on_toggled_cb,
@@ -1202,11 +1202,11 @@ empathy_streamed_media_window_init (EmpathyStreamedMediaWindow *self)
 
   gtk_widget_hide (priv->sidebar);
 
-  priv->fullscreen = empathy_call_window_fullscreen_new (self);
-  empathy_call_window_fullscreen_set_video_widget (priv->fullscreen,
+  priv->fullscreen = empathy_streamed_media_window_fullscreen_new (self);
+  empathy_streamed_media_window_fullscreen_set_video_widget (priv->fullscreen,
       priv->video_output);
   g_signal_connect (G_OBJECT (priv->fullscreen->leave_fullscreen_button),
-      "clicked", G_CALLBACK (empathy_call_window_fullscreen_cb), self);
+      "clicked", G_CALLBACK (empathy_streamed_media_window_fullscreen_cb), self);
 
   g_signal_connect (G_OBJECT (self), "realize",
     G_CALLBACK (empathy_streamed_media_window_realized_cb), self);
@@ -2993,7 +2993,7 @@ empathy_streamed_media_window_state_event_cb (GtkWidget *widget,
           disconnect_video_output_motion_handler (window);
         }
 
-      empathy_call_window_fullscreen_set_fullscreen (priv->fullscreen,
+      empathy_streamed_media_window_fullscreen_set_fullscreen (priv->fullscreen,
           set_fullscreen);
       show_controls (window, set_fullscreen);
       show_borders (window, set_fullscreen);
@@ -3181,14 +3181,14 @@ empathy_streamed_media_window_redial_cb (gpointer object,
 }
 
 static void
-empathy_call_window_fullscreen_cb (gpointer object,
+empathy_streamed_media_window_fullscreen_cb (gpointer object,
                                    EmpathyStreamedMediaWindow *window)
 {
-  empathy_call_window_fullscreen_toggle (window);
+  empathy_streamed_media_window_fullscreen_toggle (window);
 }
 
 static void
-empathy_call_window_fullscreen_toggle (EmpathyStreamedMediaWindow *window)
+empathy_streamed_media_window_fullscreen_toggle (EmpathyStreamedMediaWindow *window)
 {
   EmpathyStreamedMediaWindowPriv *priv = GET_PRIV (window);
 
@@ -3221,7 +3221,7 @@ empathy_streamed_media_window_key_press_cb (GtkWidget *video_output,
     {
       /* Since we are in fullscreen mode, toggling will bring us back to
          normal mode. */
-      empathy_call_window_fullscreen_toggle (window);
+      empathy_streamed_media_window_fullscreen_toggle (window);
       return TRUE;
     }
 
@@ -3236,7 +3236,7 @@ empathy_streamed_media_window_video_output_motion_notify (GtkWidget *widget,
 
   if (priv->is_fullscreen)
     {
-      empathy_call_window_fullscreen_show_popup (priv->fullscreen);
+      empathy_streamed_media_window_fullscreen_show_popup (priv->fullscreen);
       return TRUE;
     }
   return FALSE;