summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2012-06-19 15:46:36 +0200
committerMarc-André Lureau <marcandre.lureau@redhat.com>2012-07-16 17:46:41 +0200
commit98287e581330dbdd81c3ef73d46c41f6658a3638 (patch)
tree41ec48e51c1f7b4c2b16a1d446d50651ee8d4c30
parent569b15e1618e8740da5d89c73779854ae620227d (diff)
spicy: disable display when deleting window
-rw-r--r--gtk/spicy.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/gtk/spicy.c b/gtk/spicy.c
index 0571cf7..5510f0c 100644
--- a/gtk/spicy.c
+++ b/gtk/spicy.c
@@ -97,6 +97,7 @@ G_DEFINE_TYPE (SpiceWindow, spice_window, G_TYPE_OBJECT);
struct spice_connection {
SpiceSession *session;
SpiceGtkSession *gtk_session;
+ SpiceMainChannel *main;
SpiceWindow *wins[CHANNELID_MAX * MONITORID_MAX];
SpiceAudio *audio;
const char *mouse_state;
@@ -117,6 +118,7 @@ static void usb_connect_failed(GObject *object,
GError *error,
gpointer data);
static gboolean is_gtk_session_property(const gchar *property);
+static void del_window(spice_connection *conn, SpiceWindow *win);
/* options */
static gboolean fullscreen = false;
@@ -561,7 +563,11 @@ static gboolean delete_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
{
SpiceWindow *win = data;
- connection_disconnect(win->conn);
+ if (win->monitor_id == 0)
+ connection_disconnect(win->conn);
+ else
+ del_window(win->conn, win);
+
return true;
}
@@ -1530,6 +1536,12 @@ static void del_window(spice_connection *conn, SpiceWindow *win)
g_debug("del display monitor %d:%d", win->id, win->monitor_id);
conn->wins[win->id * CHANNELID_MAX + win->monitor_id] = NULL;
+ if (win->id > 0)
+ spice_main_set_display_enabled(conn->main, win->id, FALSE);
+ else
+ spice_main_set_display_enabled(conn->main, win->monitor_id, FALSE);
+ spice_main_send_monitor_config(conn->main);
+
destroy_spice_window(win);
}
@@ -1576,6 +1588,7 @@ static void channel_new(SpiceSession *s, SpiceChannel *channel, gpointer data)
if (SPICE_IS_MAIN_CHANNEL(channel)) {
SPICE_DEBUG("new main channel");
+ conn->main = SPICE_MAIN_CHANNEL(channel);
g_signal_connect(channel, "channel-event",
G_CALLBACK(main_channel_event), conn);
g_signal_connect(channel, "main-mouse-update",
@@ -1621,6 +1634,7 @@ static void channel_destroy(SpiceSession *s, SpiceChannel *channel, gpointer dat
g_object_get(channel, "channel-id", &id, NULL);
if (SPICE_IS_MAIN_CHANNEL(channel)) {
SPICE_DEBUG("zap main channel");
+ conn->main = NULL;
}
if (SPICE_IS_DISPLAY_CHANNEL(channel)) {