From bb9f071a1edf595f89ce23b9d3cfb0955c89ab1d Mon Sep 17 00:00:00 2001 From: jtellier Date: Mon, 11 May 2009 09:54:19 -0400 Subject: 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. --- src/empathy-call-window-fullscreen.c | 180 ++++++++++++----------------------- src/empathy-call-window-fullscreen.h | 19 +--- src/empathy-call-window.c | 79 ++++++++++++--- 3 files changed, 132 insertions(+), 146 deletions(-) (limited to 'src') 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 + * 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 @@ -24,10 +29,10 @@ #include #include -/* 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) -- cgit v1.2.3