From 5e6f399b45abc712ff5379ae7dbb53675ad12165 Mon Sep 17 00:00:00 2001 From: Emilio Pozuelo Monfort Date: Thu, 3 Feb 2011 14:03:26 +0000 Subject: EmpathyCallWindowFullscreen -> EmpathyStreamedMediaFullscreen --- src/Makefile.am | 2 +- src/empathy-call-window-fullscreen.c | 309 ------------------------- src/empathy-call-window-fullscreen.h | 77 ------ src/empathy-streamed-media-window-fullscreen.c | 309 +++++++++++++++++++++++++ src/empathy-streamed-media-window-fullscreen.h | 77 ++++++ src/empathy-streamed-media-window.c | 28 +-- 6 files changed, 401 insertions(+), 401 deletions(-) delete mode 100644 src/empathy-call-window-fullscreen.c delete mode 100644 src/empathy-call-window-fullscreen.h create mode 100644 src/empathy-streamed-media-window-fullscreen.c create mode 100644 src/empathy-streamed-media-window-fullscreen.h diff --git a/src/Makefile.am b/src/Makefile.am index 7cd6ae15a..e321b83a3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -108,7 +108,7 @@ empathy_debugger_SOURCES = \ empathy_av_SOURCES = \ 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 \ empathy-sidebar.c empathy-sidebar.h \ $(NULL) diff --git a/src/empathy-call-window-fullscreen.c b/src/empathy-call-window-fullscreen.c deleted file mode 100644 index dad0b466c..000000000 --- a/src/empathy-call-window-fullscreen.c +++ /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 - * Copyright (C) 2007 Sunil Mohan Adapa - * - * 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 - -#include -#include - -/* 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 index 967a52475..000000000 --- a/src/empathy-call-window-fullscreen.h +++ /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 -#include - -#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 index 000000000..caa34ffd1 --- /dev/null +++ b/src/empathy-streamed-media-window-fullscreen.c @@ -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 + * Copyright (C) 2007 Sunil Mohan Adapa + * + * 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 + +#include +#include + +/* 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 index 000000000..bdb95fb0b --- /dev/null +++ b/src/empathy-streamed-media-window-fullscreen.h @@ -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 +#include + +#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__*/ diff --git a/src/empathy-streamed-media-window.c b/src/empathy-streamed-media-window.c index 56c315ff2..0b8ff7d3a 100644 --- a/src/empathy-streamed-media-window.c +++ b/src/empathy-streamed-media-window.c @@ -52,7 +52,7 @@ #include #include "empathy-streamed-media-window.h" -#include "empathy-call-window-fullscreen.h" +#include "empathy-streamed-media-window-fullscreen.h" #include "empathy-sidebar.h" #define BUTTON_ID "empathy-call-dtmf-button-id" @@ -208,7 +208,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 @@ -254,10 +254,10 @@ static void empathy_streamed_media_window_sidebar_shown_cb (EmpathySidebar *side 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); @@ -1087,7 +1087,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, @@ -1211,11 +1211,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); @@ -2994,7 +2994,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); @@ -3182,14 +3182,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); @@ -3222,7 +3222,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; } @@ -3237,7 +3237,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; -- cgit v1.2.3