aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-05-04 20:00:29 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-05-04 20:00:29 +0200
commit2a38db4a425d7ffdc2dc72f3cc4f28f2864ffa86 (patch)
tree3aa3cbecefee792e3316ff0d3704028863813b0d
parentce7587f1178df5d775d513db635eb6a2333c335d (diff)
downloadgtk-vlc-player-2a38db4a425d7ffdc2dc72f3cc4f28f2864ffa86.tar.gz
fixed fullscreen-mode of gtk-vlc-player
it's subclassed from GtkAlignment now, so there's always a container for the GtkDrawingArea whose X-Window will be used by libvlc
-rw-r--r--lib/gtk-vlc-player/gtk-vlc-player.c41
-rw-r--r--lib/gtk-vlc-player/gtk-vlc-player.h8
2 files changed, 22 insertions, 27 deletions
diff --git a/lib/gtk-vlc-player/gtk-vlc-player.c b/lib/gtk-vlc-player/gtk-vlc-player.c
index b2272a0..a0cdeb3 100644
--- a/lib/gtk-vlc-player/gtk-vlc-player.c
+++ b/lib/gtk-vlc-player/gtk-vlc-player.c
@@ -43,7 +43,7 @@ gtk_vlc_player_get_type(void)
(GInstanceInitFunc)gtk_vlc_player_init,
};
- type = g_type_register_static(GTK_TYPE_DRAWING_AREA,
+ type = g_type_register_static(GTK_TYPE_ALIGNMENT,
"GtkVlcPlayer", &info, 0);
}
@@ -97,16 +97,20 @@ gtk_vlc_player_init(GtkVlcPlayer *klass)
GdkColor color;
libvlc_event_manager_t *evman;
+ gtk_alignment_set(GTK_ALIGNMENT(klass), 0., 0., 1., 1.);
+ klass->drawing_area = gtk_drawing_area_new();
+ gtk_container_add(GTK_CONTAINER(klass), klass->drawing_area);
+
gdk_color_parse("black", &color);
- gtk_widget_modify_bg(GTK_WIDGET(klass), GTK_STATE_NORMAL, &color);
+ gtk_widget_modify_bg(klass->drawing_area, GTK_STATE_NORMAL, &color);
- g_signal_connect(G_OBJECT(klass), "realize",
- G_CALLBACK(widget_on_realize), NULL);
+ g_signal_connect(G_OBJECT(klass->drawing_area), "realize",
+ G_CALLBACK(widget_on_realize), klass);
/* FIXME: must probably do via vlc events */
- gtk_widget_add_events(GTK_WIDGET(klass), GDK_BUTTON_PRESS_MASK);
- g_signal_connect(G_OBJECT(klass), "button-press-event",
- G_CALLBACK(widget_on_click), NULL);
+ gtk_widget_add_events(klass->drawing_area, GDK_BUTTON_PRESS_MASK);
+ g_signal_connect(G_OBJECT(klass->drawing_area), "button-press-event",
+ G_CALLBACK(widget_on_click), klass);
klass->vlc_inst = libvlc_new(0, NULL);
klass->media_player = libvlc_media_player_new(klass->vlc_inst);
@@ -120,14 +124,14 @@ gtk_vlc_player_init(GtkVlcPlayer *klass)
vlc_length_changed, klass);
klass->isFullscreen = FALSE;
- klass->fullscreen_window = NULL;
- klass->orig_parent = NULL;
+ klass->fullscreen_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_widget_hide(klass->fullscreen_window);
}
static void
-widget_on_realize(GtkWidget *widget, gpointer data __attribute__((unused)))
+widget_on_realize(GtkWidget *widget, gpointer user_data)
{
- GtkVlcPlayer *player = GTK_VLC_PLAYER(widget);
+ GtkVlcPlayer *player = GTK_VLC_PLAYER(user_data);
GdkWindow *window = gtk_widget_get_window(widget);
#ifdef __WIN32__
@@ -139,10 +143,9 @@ widget_on_realize(GtkWidget *widget, gpointer data __attribute__((unused)))
/* FIXME: might have to use libvlc events */
static gboolean
-widget_on_click(GtkWidget *widget, GdkEventButton *event,
- gpointer user_data __attribute__((unused)))
+widget_on_click(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
{
- GtkVlcPlayer *player = GTK_VLC_PLAYER(widget);
+ GtkVlcPlayer *player = GTK_VLC_PLAYER(user_data);
if (event->type != GDK_2BUTTON_PRESS || event->button != 1)
return TRUE;
@@ -150,20 +153,12 @@ widget_on_click(GtkWidget *widget, GdkEventButton *event,
//DEBUG("player_widget double-click");
if (player->isFullscreen) {
- assert(player->fullscreen_window != NULL);
- assert(player->orig_parent != NULL);
-
gtk_window_unfullscreen(GTK_WINDOW(player->fullscreen_window));
- gtk_widget_reparent(widget, player->orig_parent);
+ gtk_widget_reparent(widget, GTK_WIDGET(player));
gtk_widget_hide(player->fullscreen_window);
player->isFullscreen = FALSE;
} else {
- if (player->fullscreen_window == NULL)
- player->fullscreen_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-
- player->orig_parent = gtk_widget_get_parent(widget);
-
gtk_widget_show(player->fullscreen_window);
gtk_widget_reparent(widget, player->fullscreen_window);
gtk_window_fullscreen(GTK_WINDOW(player->fullscreen_window));
diff --git a/lib/gtk-vlc-player/gtk-vlc-player.h b/lib/gtk-vlc-player/gtk-vlc-player.h
index 217371c..7a05f6e 100644
--- a/lib/gtk-vlc-player/gtk-vlc-player.h
+++ b/lib/gtk-vlc-player/gtk-vlc-player.h
@@ -22,19 +22,19 @@ G_BEGIN_DECLS
(G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_VLC_PLAYER, GtkVlcPlayerClass))
typedef struct _GtkVlcPlayer {
- GtkDrawingArea parent_instance;
+ GtkAlignment parent_instance;
+
+ GtkWidget *drawing_area;
libvlc_instance_t *vlc_inst;
libvlc_media_player_t *media_player;
gboolean isFullscreen;
-
GtkWidget *fullscreen_window;
- GtkWidget *orig_parent;
} GtkVlcPlayer;
typedef struct _GtkVlcPlayerClass {
- GtkDrawingAreaClass parent_class;
+ GtkAlignmentClass parent_class;
void (*time_changed) (GtkVlcPlayer *self, gint64 new_time, gpointer user_data);
void (*length_changed) (GtkVlcPlayer *self, gint64 new_length, gpointer user_data);