aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjtellier <jtellier@Jospin.localdomain>2009-05-11 21:54:19 +0800
committerjtellier <jonathan.tellier@collabora.co.uk>2009-05-12 23:43:49 +0800
commitbb9f071a1edf595f89ce23b9d3cfb0955c89ab1d (patch)
tree5278cfb792c74d8a44d2c81392dec3448999b9fa
parent10686010ed50b5f39dc0abf000c66577dbff2ff9 (diff)
downloadgsoc2013-empathy-bb9f071a1edf595f89ce23b9d3cfb0955c89ab1d.tar
gsoc2013-empathy-bb9f071a1edf595f89ce23b9d3cfb0955c89ab1d.tar.gz
gsoc2013-empathy-bb9f071a1edf595f89ce23b9d3cfb0955c89ab1d.tar.bz2
gsoc2013-empathy-bb9f071a1edf595f89ce23b9d3cfb0955c89ab1d.tar.lz
gsoc2013-empathy-bb9f071a1edf595f89ce23b9d3cfb0955c89ab1d.tar.xz
gsoc2013-empathy-bb9f071a1edf595f89ce23b9d3cfb0955c89ab1d.tar.zst
gsoc2013-empathy-bb9f071a1edf595f89ce23b9d3cfb0955c89ab1d.zip
Fixed coding style by removing trailing spaces and not using a mix of
tabs and spaces. Removed some responsabilities from EmpathyCallWindowFullscreen. It now only manages the "Leave Fullscreen" popup and button.
-rw-r--r--src/empathy-call-window-fullscreen.c180
-rw-r--r--src/empathy-call-window-fullscreen.h19
-rw-r--r--src/empathy-call-window.c79
3 files changed, 132 insertions, 146 deletions
diff --git a/src/empathy-call-window-fullscreen.c b/src/empathy-call-window-fullscreen.c
index d01d65b06..888b1dfde 100644
--- a/src/empathy-call-window-fullscreen.c
+++ b/src/empathy-call-window-fullscreen.c
@@ -1,7 +1,12 @@
/*
- * empathy-call-window.c - Source for EmpathyCallWindow
+ * 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
@@ -24,10 +29,10 @@
#include <libempathy/empathy-utils.h>
#include <libempathy-gtk/empathy-ui-utils.h>
-/* The number of seconds fo which the "leave fullscreen" popup should be shown */
+/* 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, GTK_TYPE_WINDOW)
+G_DEFINE_TYPE (EmpathyCallWindowFullscreen, empathy_call_window_fullscreen, G_TYPE_OBJECT)
/* private structure */
typedef struct _EmpathyCallWindowFullscreenPriv EmpathyCallWindowFullscreenPriv;
@@ -35,11 +40,10 @@ typedef struct _EmpathyCallWindowFullscreenPriv EmpathyCallWindowFullscreenPriv;
struct _EmpathyCallWindowFullscreenPriv
{
EmpathyCallWindow *parent_window;
-
+
GtkWidget *leave_fullscreen_popup;
GtkWidget *video_widget;
- gulong motion_handler_id;
guint popup_timeout;
gboolean popup_creation_in_progress;
gboolean dispose_has_run;
@@ -52,8 +56,6 @@ struct _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_motion_notify (GtkWidget *widget,
- GdkEventMotion *event, EmpathyCallWindowFullscreen *fs);
static gboolean empathy_call_window_fullscreen_hide_popup (EmpathyCallWindowFullscreen *fs);
static void
@@ -75,8 +77,8 @@ empathy_call_window_fullscreen_add_popup_timeout (EmpathyCallWindowFullscreen *s
if (priv->popup_timeout == 0)
{
- priv->popup_timeout = g_timeout_add_seconds (FULLSCREEN_POPUP_TIMEOUT,
- (GSourceFunc) empathy_call_window_fullscreen_hide_popup, self);
+ priv->popup_timeout = g_timeout_add_seconds (FULLSCREEN_POPUP_TIMEOUT,
+ (GSourceFunc) empathy_call_window_fullscreen_hide_popup, self);
}
}
@@ -87,20 +89,20 @@ empathy_call_window_fullscreen_remove_popup_timeout (EmpathyCallWindowFullscreen
if (priv->popup_timeout != 0)
{
- g_source_remove (priv->popup_timeout);
- priv->popup_timeout = 0;
- }
+ g_source_remove (priv->popup_timeout);
+ priv->popup_timeout = 0;
+ }
}
-static void
+void
empathy_call_window_fullscreen_show_popup (EmpathyCallWindowFullscreen *self)
{
- g_assert (self->is_fullscreen);
-
gint leave_fullscreen_width, leave_fullscreen_height;
- GdkScreen *screen;
- GdkRectangle fullscreen_rect;
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
+ GdkScreen *screen;
+ GdkRectangle fullscreen_rect;
+ EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
+
+ g_assert (self->is_fullscreen);
g_return_if_fail (priv->parent_window != NULL);
@@ -108,30 +110,40 @@ empathy_call_window_fullscreen_show_popup (EmpathyCallWindowFullscreen *self)
return;
if (!gtk_window_is_active (GTK_WINDOW (priv->parent_window)))
- return;
+ 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 (priv->parent_window)->window),
- &fullscreen_rect);
+ /* 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 (priv->parent_window)->window),
+ &fullscreen_rect);
- /* Getting the popup window sizes */
- gtk_window_get_size (GTK_WINDOW (priv->leave_fullscreen_popup),
- &leave_fullscreen_width, &leave_fullscreen_height);
+ /* 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-left corner */
- gtk_window_move (GTK_WINDOW (priv->leave_fullscreen_popup),
- fullscreen_rect.width + fullscreen_rect.x - leave_fullscreen_width,
- fullscreen_rect.y);
+ /* 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;
}
@@ -162,7 +174,7 @@ empathy_call_window_fullscreen_init (EmpathyCallWindowFullscreen *self)
gui = empathy_builder_get_file (filename,
"leave_fullscreen_window", &priv->leave_fullscreen_popup,
"leave_fullscreen_button", &self->leave_fullscreen_button,
- NULL);
+ NULL);
gtk_widget_add_events (priv->leave_fullscreen_popup, GDK_POINTER_MOTION_MASK);
@@ -171,13 +183,11 @@ empathy_call_window_fullscreen_init (EmpathyCallWindowFullscreen *self)
}
static void
-empathy_call_window_fullscreen_class_init (
- EmpathyCallWindowFullscreenClass *empathy_call_window_fullscreen_class)
+empathy_call_window_fullscreen_class_init (EmpathyCallWindowFullscreenClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (empathy_call_window_fullscreen_class);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (empathy_call_window_fullscreen_class,
- sizeof (EmpathyCallWindowFullscreenPriv));
+ g_type_class_add_private (klass, sizeof (EmpathyCallWindowFullscreenPriv));
object_class->dispose = empathy_call_window_fullscreen_dispose;
object_class->finalize = empathy_call_window_fullscreen_finalize;
@@ -192,39 +202,23 @@ empathy_call_window_fullscreen_dispose (GObject *object)
if (priv->dispose_has_run)
return;
- if (priv->parent_window != NULL)
- g_object_unref (priv->parent_window);
- priv->parent_window = NULL;
-
+ priv->dispose_has_run = TRUE;
+
if (priv->leave_fullscreen_popup != NULL)
gtk_widget_destroy (priv->leave_fullscreen_popup);
priv->leave_fullscreen_popup = NULL;
- if (self->leave_fullscreen_button != NULL)
- gtk_widget_destroy (self->leave_fullscreen_button);
- self->leave_fullscreen_button = NULL;
-
if (G_OBJECT_CLASS (empathy_call_window_fullscreen_parent_class)->dispose)
G_OBJECT_CLASS (empathy_call_window_fullscreen_parent_class)->dispose (object);
-
- priv->dispose_has_run = TRUE;
}
void
empathy_call_window_fullscreen_finalize (GObject *object)
{
EmpathyCallWindowFullscreen *self = EMPATHY_CALL_WINDOW_FULLSCREEN (object);
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
empathy_call_window_fullscreen_remove_popup_timeout (self);
- if (priv->motion_handler_id != 0)
- {
- g_signal_handler_disconnect (G_OBJECT (priv->video_widget),
- priv->motion_handler_id);
- priv->motion_handler_id = 0;
- }
-
G_OBJECT_CLASS (empathy_call_window_fullscreen_parent_class)->finalize (object);
}
@@ -234,13 +228,13 @@ empathy_call_window_fullscreen_parent_window_notify (GtkWidget *parent_window,
{
EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (fs);
- if (!fs->is_fullscreen)
- return;
+ if (!fs->is_fullscreen)
+ return;
- if (parent_window == GTK_WIDGET (priv->parent_window) &&
- gtk_window_is_active (GTK_WINDOW (parent_window)) == FALSE)
+ 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_hide_popup (fs);
empathy_call_window_fullscreen_set_cursor_visible (fs, TRUE);
}
}
@@ -254,56 +248,23 @@ empathy_call_window_fullscreen_new (EmpathyCallWindow *parent_window)
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);
+ G_CALLBACK (empathy_call_window_fullscreen_parent_window_notify), self);
return self;
}
void
empathy_call_window_fullscreen_set_fullscreen (EmpathyCallWindowFullscreen *fs,
- gboolean sidebar_was_visible,
- gint original_width,
- gint original_height)
-{
- g_return_if_fail (!fs->is_fullscreen);
-
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (fs);
-
- empathy_call_window_fullscreen_remove_popup_timeout (fs);
- empathy_call_window_fullscreen_set_cursor_visible (fs, FALSE);
-
- fs->sidebar_was_visible = sidebar_was_visible;
- fs->original_width = original_width;
- fs->original_height = original_height;
-
- if (priv->motion_handler_id == 0 && priv->video_widget != NULL)
- {
- priv->motion_handler_id = g_signal_connect (G_OBJECT (priv->video_widget),
- "motion-notify-event", G_CALLBACK (empathy_call_window_fullscreen_motion_notify),
- fs);
- }
-
- fs->is_fullscreen = TRUE;
-}
-
-void
-empathy_call_window_fullscreen_unset_fullscreen (EmpathyCallWindowFullscreen *fs)
+ gboolean set_fullscreen)
{
- g_return_if_fail (fs->is_fullscreen);
-
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (fs);
-
- empathy_call_window_fullscreen_hide_popup (fs);
- empathy_call_window_fullscreen_set_cursor_visible (fs, TRUE);
- if (priv->motion_handler_id != 0)
- {
- g_signal_handler_disconnect (G_OBJECT (priv->video_widget),
- priv->motion_handler_id);
- priv->motion_handler_id = 0;
- }
+ if (set_fullscreen)
+ empathy_call_window_fullscreen_remove_popup_timeout (fs);
+ else
+ empathy_call_window_fullscreen_hide_popup (fs);
- fs->is_fullscreen = FALSE;
+ empathy_call_window_fullscreen_set_cursor_visible (fs, !set_fullscreen);
+ fs->is_fullscreen = set_fullscreen;
}
void
@@ -311,20 +272,5 @@ empathy_call_window_fullscreen_set_video_widget (EmpathyCallWindowFullscreen *fs
GtkWidget *video_widget)
{
EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (fs);
-
priv->video_widget = video_widget;
-
- if (fs->is_fullscreen == TRUE && priv->motion_handler_id == 0) {
- priv->motion_handler_id = g_signal_connect (G_OBJECT (priv->video_widget),
- "motion-notify-event", G_CALLBACK (empathy_call_window_fullscreen_motion_notify),
- fs);
- }
}
-
-static gboolean
-empathy_call_window_fullscreen_motion_notify (GtkWidget *widget,
- GdkEventMotion *event, EmpathyCallWindowFullscreen *self)
-{
- empathy_call_window_fullscreen_show_popup (self);
- return FALSE;
-} \ No newline at end of file
diff --git a/src/empathy-call-window-fullscreen.h b/src/empathy-call-window-fullscreen.h
index 543f7acda..53dcf40e1 100644
--- a/src/empathy-call-window-fullscreen.h
+++ b/src/empathy-call-window-fullscreen.h
@@ -1,5 +1,5 @@
/*
- * empathy-call-window.c - Source for EmpathyCallWindow
+ * empathy-call-window-fullscreen.h - Header for EmpathyCallWindowFullscreen
* Copyright (C) 2009 Collabora Ltd.
*
* This library is free software; you can redistribute it and/or
@@ -31,20 +31,13 @@ typedef struct _EmpathyCallWindowFullscreen EmpathyCallWindowFullscreen;
typedef struct _EmpathyCallWindowFullscreenClass EmpathyCallWindowFullscreenClass;
struct _EmpathyCallWindowFullscreenClass {
- GtkWindowClass parent_class;
+ GObjectClass parent_class;
};
struct _EmpathyCallWindowFullscreen {
- GtkWindow parent;
+ GObject parent;
gboolean is_fullscreen;
-
GtkWidget *leave_fullscreen_button;
-
- /* Those fields represent the state of the parent empathy_call_window before
- it actually was in fullscreen mode. */
- gboolean sidebar_was_visible;
- gint original_width;
- gint original_height;
};
GType empathy_call_window_fullscreen_get_type(void);
@@ -70,12 +63,10 @@ EmpathyCallWindowFullscreen *
empathy_call_window_fullscreen_new (EmpathyCallWindow *parent);
void empathy_call_window_fullscreen_set_fullscreen (EmpathyCallWindowFullscreen *fs,
- gboolean sidebar_was_visible,
- gint original_width,
- gint original_height);
-void empathy_call_window_fullscreen_unset_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
diff --git a/src/empathy-call-window.c b/src/empathy-call-window.c
index b05999d8c..fe633045a 100644
--- a/src/empathy-call-window.c
+++ b/src/empathy-call-window.c
@@ -97,6 +97,8 @@ struct _EmpathyCallWindowPriv
it needs to be repacked. We keep a reference on it for easier access. */
GtkWidget *vbox;
+ gulong video_output_motion_handler_id;
+
gdouble volume;
GtkAdjustment *audio_input_adj;
@@ -125,6 +127,13 @@ struct _EmpathyCallWindowPriv
gboolean sending_video;
EmpathyCallWindowFullscreen *fullscreen;
+ gboolean is_fullscreen;
+
+ /* Those fields represent the state of the window before it actually was in
+ fullscreen mode. */
+ gboolean sidebar_was_visible_before_fs;
+ gint original_width_before_fs;
+ gint original_height_before_fs;
};
#define GET_PRIV(o) \
@@ -175,6 +184,9 @@ static gboolean empathy_call_window_video_button_press_cb (GtkWidget *video_outp
static gboolean empathy_call_window_key_press_cb (GtkWidget *video_output,
GdkEventKey *event, EmpathyCallWindow *window);
+static gboolean empathy_call_window_video_output_motion_notify (GtkWidget *widget,
+ GdkEventMotion *event, EmpathyCallWindow *window);
+
static void empathy_call_window_video_menu_popup (EmpathyCallWindow *window,
guint button);
@@ -533,7 +545,7 @@ empathy_call_window_init (EmpathyCallWindow *self)
priv->pipeline = gst_pipeline_new (NULL);
priv->content_hbox = gtk_hbox_new (FALSE, CONTENT_HBOX_SPACING);
- gtk_container_set_border_width (GTK_CONTAINER (priv->content_hbox),
+ gtk_container_set_border_width (GTK_CONTAINER (priv->content_hbox),
CONTENT_HBOX_BORDER_WIDTH);
gtk_paned_pack1 (GTK_PANED (priv->pane), priv->content_hbox, TRUE, FALSE);
@@ -805,6 +817,13 @@ empathy_call_window_finalize (GObject *object)
EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (object);
EmpathyCallWindowPriv *priv = GET_PRIV (self);
+ if (priv->video_output_motion_handler_id != 0)
+ {
+ g_signal_handler_disconnect (G_OBJECT (priv->video_output),
+ priv->video_output_motion_handler_id);
+ priv->video_output_motion_handler_id = 0;
+ }
+
/* free any data held directly by the object here */
g_mutex_free (priv->lock);
@@ -1241,7 +1260,7 @@ show_controls (EmpathyCallWindow *window, gboolean set_fullscreen)
}
else
{
- if (priv->fullscreen->sidebar_was_visible)
+ if (priv->sidebar_was_visible_before_fs)
gtk_widget_show (priv->sidebar);
gtk_widget_show (menu);
@@ -1249,10 +1268,9 @@ show_controls (EmpathyCallWindow *window, gboolean set_fullscreen)
gtk_widget_show (priv->statusbar);
gtk_widget_show (priv->toolbar);
- gtk_window_resize (GTK_WINDOW (window),
- priv->fullscreen->original_width,
- priv->fullscreen->original_height);
- }
+ gtk_window_resize (GTK_WINDOW (window), priv->original_width_before_fs,
+ priv->original_height_before_fs);
+ }
}
static void
@@ -1271,7 +1289,7 @@ show_borders (EmpathyCallWindow *window, gboolean set_fullscreen)
gtk_box_set_child_packing (GTK_BOX (priv->content_hbox),
priv->vbox, TRUE, TRUE,
set_fullscreen ? 0 : CONTENT_HBOX_CHILDREN_PACKING_PADDING,
- GTK_PACK_START);
+ GTK_PACK_START);
}
static gboolean
@@ -1289,19 +1307,35 @@ empathy_call_window_state_event_cb (GtkWidget *widget,
gint original_width = GTK_WIDGET (window)->allocation.width;
gint original_height = GTK_WIDGET (window)->allocation.height;
- g_object_get (priv->sidebar, "visible",
- &sidebar_was_visible, NULL);
+ g_object_get (priv->sidebar, "visible", &sidebar_was_visible, NULL);
- empathy_call_window_fullscreen_set_fullscreen (priv->fullscreen,
- sidebar_was_visible, original_width, original_height);
+ priv->sidebar_was_visible_before_fs = sidebar_was_visible;
+ priv->original_width_before_fs = original_width;
+ priv->original_height_before_fs = original_height;
+
+ if (priv->video_output_motion_handler_id == 0 &&
+ priv->video_output != NULL)
+ {
+ priv->video_output_motion_handler_id = g_signal_connect (
+ G_OBJECT (priv->video_output), "motion-notify-event",
+ G_CALLBACK (empathy_call_window_video_output_motion_notify), window);
+ }
}
else
{
- empathy_call_window_fullscreen_unset_fullscreen(priv->fullscreen);
+ if (priv->video_output_motion_handler_id != 0)
+ {
+ g_signal_handler_disconnect (G_OBJECT (priv->video_output),
+ priv->video_output_motion_handler_id);
+ priv->video_output_motion_handler_id = 0;
+ }
}
+ empathy_call_window_fullscreen_set_fullscreen (priv->fullscreen,
+ set_fullscreen);
show_controls (window, set_fullscreen);
show_borders (window, set_fullscreen);
+ priv->is_fullscreen = set_fullscreen;
}
return FALSE;
@@ -1463,7 +1497,7 @@ empathy_call_window_fullscreen_toggle (EmpathyCallWindow *window)
{
EmpathyCallWindowPriv *priv = GET_PRIV (window);
- if (priv->fullscreen->is_fullscreen)
+ if (priv->is_fullscreen)
gtk_window_unfullscreen (GTK_WINDOW (window));
else
gtk_window_fullscreen (GTK_WINDOW (window));
@@ -1487,8 +1521,8 @@ empathy_call_window_key_press_cb (GtkWidget *video_output,
GdkEventKey *event, EmpathyCallWindow *window)
{
EmpathyCallWindowPriv *priv = GET_PRIV (window);
-
- if (priv->fullscreen->is_fullscreen && event->keyval == GDK_Escape)
+
+ if (priv->is_fullscreen && event->keyval == GDK_Escape)
{
/* Since we are in fullscreen mode, toggling will bring us back to
normal mode. */
@@ -1499,6 +1533,21 @@ empathy_call_window_key_press_cb (GtkWidget *video_output,
return FALSE;
}
+static gboolean
+empathy_call_window_video_output_motion_notify (GtkWidget *widget,
+ GdkEventMotion *event, EmpathyCallWindow *window)
+{
+ EmpathyCallWindowPriv *priv = GET_PRIV (window);
+
+ if (priv->is_fullscreen)
+ {
+ empathy_call_window_fullscreen_show_popup (priv->fullscreen);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static void
empathy_call_window_video_menu_popup (EmpathyCallWindow *window,
guint button)