147 | 147 |
GdkModifierType insert_smartcard_accel_mods;
|
148 | 148 |
guint remove_smartcard_accel_key;
|
149 | 149 |
GdkModifierType remove_smartcard_accel_mods;
|
|
150 |
gboolean quit_on_disconnect;
|
150 | 151 |
};
|
151 | 152 |
|
152 | 153 |
|
|
166 | 167 |
PROP_HAS_FOCUS,
|
167 | 168 |
PROP_FULLSCREEN_AUTO_CONF,
|
168 | 169 |
PROP_KIOSK,
|
|
170 |
PROP_QUIT_ON_DISCONNECT,
|
169 | 171 |
};
|
170 | 172 |
|
171 | 173 |
enum {
|
|
1129 | 1131 |
priv->guest_name);
|
1130 | 1132 |
}
|
1131 | 1133 |
|
1132 | |
gtk_main_quit();
|
|
1134 |
if (self->priv->quit_on_disconnect)
|
|
1135 |
gtk_main_quit();
|
1133 | 1136 |
}
|
1134 | 1137 |
|
1135 | 1138 |
static void
|
|
1338 | 1341 |
g_value_set_boolean(value, priv->kiosk);
|
1339 | 1342 |
break;
|
1340 | 1343 |
|
|
1344 |
case PROP_QUIT_ON_DISCONNECT:
|
|
1345 |
g_value_set_boolean(value, priv->quit_on_disconnect);
|
|
1346 |
break;
|
|
1347 |
|
1341 | 1348 |
default:
|
1342 | 1349 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
1343 | 1350 |
}
|
|
1385 | 1392 |
|
1386 | 1393 |
case PROP_KIOSK:
|
1387 | 1394 |
virt_viewer_app_set_kiosk(self, g_value_get_boolean(value));
|
|
1395 |
break;
|
|
1396 |
|
|
1397 |
case PROP_QUIT_ON_DISCONNECT:
|
|
1398 |
priv->quit_on_disconnect = g_value_get_boolean(value);
|
1388 | 1399 |
break;
|
1389 | 1400 |
|
1390 | 1401 |
default:
|
|
1455 | 1466 |
static gboolean opt_fullscreen = FALSE;
|
1456 | 1467 |
static gboolean opt_fullscreen_auto_conf = FALSE;
|
1457 | 1468 |
static gboolean opt_kiosk = FALSE;
|
|
1469 |
static gboolean opt_kiosk_quit = FALSE;
|
1458 | 1470 |
|
1459 | 1471 |
static void
|
1460 | 1472 |
virt_viewer_app_init (VirtViewerApp *self)
|
|
1484 | 1496 |
|
1485 | 1497 |
self->priv->verbose = opt_verbose;
|
1486 | 1498 |
self->priv->fullscreen_auto_conf = opt_fullscreen_auto_conf;
|
|
1499 |
self->priv->quit_on_disconnect = opt_kiosk ? opt_kiosk_quit : TRUE;
|
1487 | 1500 |
}
|
1488 | 1501 |
|
1489 | 1502 |
static void
|
|
1681 | 1694 |
G_PARAM_READWRITE |
|
1682 | 1695 |
G_PARAM_STATIC_STRINGS));
|
1683 | 1696 |
|
|
1697 |
g_object_class_install_property(object_class,
|
|
1698 |
PROP_QUIT_ON_DISCONNECT,
|
|
1699 |
g_param_spec_boolean("quit-on-disconnect",
|
|
1700 |
"Quit on disconnect",
|
|
1701 |
"Quit on disconnect",
|
|
1702 |
TRUE,
|
|
1703 |
G_PARAM_READWRITE |
|
|
1704 |
G_PARAM_STATIC_STRINGS));
|
|
1705 |
|
1684 | 1706 |
signals[SIGNAL_WINDOW_ADDED] =
|
1685 | 1707 |
g_signal_new("window-added",
|
1686 | 1708 |
G_OBJECT_CLASS_TYPE(object_class),
|
|
2148 | 2170 |
return FALSE;
|
2149 | 2171 |
}
|
2150 | 2172 |
|
|
2173 |
static gboolean
|
|
2174 |
option_kiosk_quit(G_GNUC_UNUSED const gchar *option_name,
|
|
2175 |
const gchar *value,
|
|
2176 |
G_GNUC_UNUSED gpointer data, GError **error)
|
|
2177 |
{
|
|
2178 |
if (g_str_equal(value, "never")) {
|
|
2179 |
opt_kiosk_quit = FALSE;
|
|
2180 |
return TRUE;
|
|
2181 |
}
|
|
2182 |
if (g_str_equal(value, "on-disconnect")) {
|
|
2183 |
opt_kiosk_quit = TRUE;
|
|
2184 |
return TRUE;
|
|
2185 |
}
|
|
2186 |
|
|
2187 |
g_set_error(error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, _("Invalid kiosk-quit argument: %s"), value);
|
|
2188 |
return FALSE;
|
|
2189 |
}
|
|
2190 |
|
2151 | 2191 |
const GOptionEntry *
|
2152 | 2192 |
virt_viewer_app_get_options(void)
|
2153 | 2193 |
{
|
|
2160 | 2200 |
N_("Customise hotkeys"), NULL },
|
2161 | 2201 |
{ "kiosk", 'k', 0, G_OPTION_ARG_NONE, &opt_kiosk,
|
2162 | 2202 |
N_("Enable kiosk mode"), NULL },
|
|
2203 |
{ "kiosk-quit", '\0', 0, G_OPTION_ARG_CALLBACK, option_kiosk_quit,
|
|
2204 |
N_("Quit on given condition in kiosk mode"), N_("<never|on-disconnect>") },
|
2163 | 2205 |
{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &opt_verbose,
|
2164 | 2206 |
N_("Display verbose information"), NULL },
|
2165 | 2207 |
{ "debug", '\0', 0, G_OPTION_ARG_NONE, &opt_debug,
|