[ekiga/ds-gsettings3] X11: Fixed black window problem when displaying video.
- From: Damien Sandras <dsandras src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ekiga/ds-gsettings3] X11: Fixed black window problem when displaying video.
- Date: Sat, 23 Nov 2013 11:04:39 +0000 (UTC)
commit e97f13bfecec16edb7368e3bfd46df35befdea04
Author: Damien Sandras <dsandras beip be>
Date: Sat Nov 23 12:02:42 2013 +0100
X11: Fixed black window problem when displaying video.
lib/engine/gui/gtk-frontend/call-window.cpp | 17 ++++++++++-------
lib/engine/gui/gtk-frontend/ext-window.cpp | 17 ++++++++++-------
lib/engine/gui/gtk-frontend/gtk-frontend.cpp | 10 +++++++---
3 files changed, 27 insertions(+), 17 deletions(-)
---
diff --git a/lib/engine/gui/gtk-frontend/call-window.cpp b/lib/engine/gui/gtk-frontend/call-window.cpp
index a94ed12..d914d0d 100644
--- a/lib/engine/gui/gtk-frontend/call-window.cpp
+++ b/lib/engine/gui/gtk-frontend/call-window.cpp
@@ -103,6 +103,7 @@ struct _EkigaCallWindowPrivate
unsigned calling_state;
GtkWidget *ext_video_win;
+ GtkWidget *event_box;
GtkWidget *main_video_image;
GtkWidget *spinner;
GtkWidget *info_text;
@@ -813,13 +814,13 @@ ekiga_call_window_set_video_size (EkigaCallWindow *cw,
zoom_in_changed_cb (NULL, (gpointer) cw);
}
- gtk_widget_get_size_request (cw->priv->main_video_image, &pw, &ph);
+ gtk_widget_get_size_request (cw->priv->event_box, &pw, &ph);
/* No size requisition yet
* It's our first call so we silently set the new requisition and exit...
*/
if (pw == -1) {
- gtk_widget_set_size_request (cw->priv->main_video_image, width, height);
+ gtk_widget_set_size_request (cw->priv->event_box, width, height);
return;
}
@@ -829,7 +830,7 @@ ekiga_call_window_set_video_size (EkigaCallWindow *cw,
if (pw == width)
return;
- gtk_widget_set_size_request (cw->priv->main_video_image, width, height);
+ gtk_widget_set_size_request (cw->priv->event_box, width, height);
gtk_widget_get_allocation (GTK_WIDGET (cw), &a);
gdk_window_invalidate_rect (gtk_widget_get_window (GTK_WIDGET (cw)), &a, true);
@@ -1212,7 +1213,7 @@ static void on_missed_call_cb (boost::shared_ptr<Ekiga::CallManager> /*manager*
{
EkigaCallWindow *cw = EKIGA_CALL_WINDOW (self);
- if (cw->priv->current_call && cw->priv->current_call->get_id () != call->get_id ()) {
+ if (cw->priv->current_call && call && cw->priv->current_call->get_id () != call->get_id ()) {
return; // Trying to clear another call than the current active one
}
@@ -2348,9 +2349,11 @@ ekiga_call_window_init_gui (EkigaCallWindow *cw)
gtk_widget_show_all (alignment);
/* The frame that contains the video */
+ cw->priv->event_box = gtk_event_box_new ();
cw->priv->main_video_image = gtk_image_new ();
- gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (cw->priv->main_video_image), true, true, 0);
- gtk_widget_show (cw->priv->main_video_image);
+ gtk_container_add (GTK_CONTAINER (cw->priv->event_box), cw->priv->main_video_image);
+ gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (cw->priv->event_box), true, true, 0);
+ gtk_widget_show (cw->priv->event_box);
/* The frame that contains information about the call */
cw->priv->call_frame = gtk_frame_new (NULL);
@@ -2587,7 +2590,7 @@ ekiga_call_window_draw (GtkWidget *widget,
if (!cw->priv->gc) {
Display *display;
- display = GDK_WINDOW_XDISPLAY (gtk_widget_get_window (video_widget));
+ display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (video_widget));
cw->priv->gc = XCreateGC(display, display_info.window, 0, 0);
g_return_val_if_fail (cw->priv->gc != NULL, handled);
}
diff --git a/lib/engine/gui/gtk-frontend/ext-window.cpp b/lib/engine/gui/gtk-frontend/ext-window.cpp
index 9c26ffe..b56c820 100644
--- a/lib/engine/gui/gtk-frontend/ext-window.cpp
+++ b/lib/engine/gui/gtk-frontend/ext-window.cpp
@@ -42,7 +42,7 @@ struct _EkigaExtWindowPrivate {
#ifndef WIN32
GC gc;
#endif
- GtkWidget *video, *zin, *zout;
+ GtkWidget *video, *zin, *zout, *event_box;
boost::shared_ptr<Ekiga::VideoOutputCore> vocore;
boost::shared_ptr<Ekiga::Settings> video_display_settings;
};
@@ -113,8 +113,11 @@ gui_layout (EkigaExtWindow *ew)
zout = gtk_button_new_from_stock (GTK_STOCK_ZOOM_OUT);
gtk_box_pack_start (GTK_BOX (hbox), zout, FALSE, FALSE, 0);
+ ew->priv->event_box = gtk_event_box_new ();
ew->priv->video = gtk_image_new ();
- gtk_box_pack_start (GTK_BOX (vbox), ew->priv->video, FALSE, FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (ew->priv->event_box), ew->priv->video);
+ gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (ew->priv->event_box), FALSE, FALSE, 0);
+ gtk_widget_show (ew->priv->event_box);
ew->priv->zin = zin;
ew->priv->zout = zout;
@@ -220,7 +223,7 @@ draw_event (GtkWidget *widget,
if (!ew->priv->gc) {
Display *display;
- display = GDK_WINDOW_XDISPLAY (gtk_widget_get_window (ew->priv->video));
+ display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (ew->priv->video));
ew->priv->gc = XCreateGC(display, info.window, 0, 0);
g_return_val_if_fail (ew->priv->gc != NULL, handled);
}
@@ -287,23 +290,23 @@ ekiga_ext_window_set_size (EkigaExtWindow *ew, int width, int height)
g_return_if_fail (width > 0 && height > 0);
- gtk_widget_get_size_request (ew->priv->video, &pw, &ph);
+ gtk_widget_get_size_request (ew->priv->event_box, &pw, &ph);
/* No size requisition yet
* It's our first call so we silently set the new requisition and exit...
*/
if (pw == -1) {
- gtk_widget_set_size_request (ew->priv->video, width, height);
+ gtk_widget_set_size_request (ew->priv->event_box, width, height);
return;
}
/* Do some kind of filtering here. We often get duplicate "size-changed" events...
- * Note that we currently only bother about the width of the video.
+ * Note that we currently only bother about the width of the event_box.
*/
if (pw == width)
return;
- gtk_widget_set_size_request (ew->priv->video, width, height);
+ gtk_widget_set_size_request (ew->priv->event_box, width, height);
gdk_window_invalidate_rect (gtk_widget_get_window (GTK_WIDGET (ew)), NULL, TRUE);
}
diff --git a/lib/engine/gui/gtk-frontend/gtk-frontend.cpp b/lib/engine/gui/gtk-frontend/gtk-frontend.cpp
index 5fe97e3..dcce8ef 100644
--- a/lib/engine/gui/gtk-frontend/gtk-frontend.cpp
+++ b/lib/engine/gui/gtk-frontend/gtk-frontend.cpp
@@ -144,6 +144,8 @@ GtkFrontend::~GtkFrontend ()
void
GtkFrontend::build ()
{
+ StatusIcon *s = NULL;
+
boost::shared_ptr<Ekiga::ContactCore> contact_core = core.get<Ekiga::ContactCore> ("contact-core");
boost::shared_ptr<Ekiga::PersonalDetails> details = core.get<Ekiga::PersonalDetails> ("personal-details");
boost::shared_ptr<Ekiga::ChatCore> chat_core = core.get<Ekiga::ChatCore> ("chat-core");
@@ -184,11 +186,13 @@ GtkFrontend::build ()
// BEWARE: the status icon needs the chat window at startup
// FIXME: the above BEWARE is related to a FIXME in the main window code,
// FIXME: hence should disappear with it
- status_icon =
- boost::shared_ptr<StatusIcon> (status_icon_new (core), g_object_unref);
- if (status_icon)
+ s = status_icon_new (core);
+ if (s) {
+ status_icon =
+ boost::shared_ptr<StatusIcon> (status_icon_new (core), g_object_unref);
g_signal_connect (status_icon.get (), "clicked",
G_CALLBACK (on_status_icon_clicked), this);
+ }
// BEWARE: the main window uses the chat window at startup already,
// and later on needs the call window, addressbook window,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]