|
Lines 298-416
Link Here
|
| 298 |
static void |
298 |
static void |
| 299 |
run_logged_in_dialogue (char **vec) |
299 |
run_logged_in_dialogue (char **vec) |
| 300 |
{ |
300 |
{ |
| 301 |
GtkWidget *dialog; |
301 |
return; |
| 302 |
GtkWidget *vbox; |
|
|
| 303 |
GtkWidget *w; |
| 304 |
GtkWidget *sw; |
| 305 |
GtkTreeModel *model; |
| 306 |
GtkWidget *treeview; |
| 307 |
GtkTreeIter iter; |
| 308 |
GtkTreeSelection *selection; |
| 309 |
|
| 310 |
dialog = gtk_dialog_new_with_buttons (_("Open Displays"), |
| 311 |
NULL /* parent */, |
| 312 |
0 /* flags */, |
| 313 |
_("_Open New Display"), |
| 314 |
RESPONSE_OPEN_NEW_DISPLAY, |
| 315 |
_("Change to _Existing Display"), |
| 316 |
RESPONSE_OPEN_EXISTING_DISPLAY, |
| 317 |
GTK_STOCK_CANCEL, |
| 318 |
GTK_RESPONSE_CANCEL, |
| 319 |
NULL); |
| 320 |
gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); |
| 321 |
vbox = GTK_DIALOG (dialog)->vbox; |
| 322 |
|
| 323 |
w = gtk_label_new (_("There are some displays already open. You can select " |
| 324 |
"one from the list below or open a new one.")); |
| 325 |
gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0); |
| 326 |
|
| 327 |
sw = gtk_scrolled_window_new (NULL, NULL); |
| 328 |
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), |
| 329 |
GTK_SHADOW_ETCHED_IN); |
| 330 |
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), |
| 331 |
GTK_POLICY_NEVER, |
| 332 |
GTK_POLICY_AUTOMATIC); |
| 333 |
gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0); |
| 334 |
|
| 335 |
/* create tree model */ |
| 336 |
model = create_model (vec); |
| 337 |
|
| 338 |
/* create tree view */ |
| 339 |
treeview = gtk_tree_view_new_with_model (model); |
| 340 |
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE); |
| 341 |
|
| 342 |
g_object_unref (model); |
| 343 |
|
| 344 |
gtk_container_add (GTK_CONTAINER (sw), treeview); |
| 345 |
|
| 346 |
/* add columns to the tree view */ |
| 347 |
add_columns (GTK_TREE_VIEW (treeview)); |
| 348 |
|
| 349 |
/* finish & show */ |
| 350 |
gtk_window_set_default_size (GTK_WINDOW (dialog), 280, 250); |
| 351 |
|
| 352 |
g_signal_connect (G_OBJECT (treeview), "row_activated", |
| 353 |
G_CALLBACK (row_activated), |
| 354 |
dialog); |
| 355 |
|
| 356 |
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); |
| 357 |
|
| 358 |
g_signal_connect (selection, "changed", |
| 359 |
G_CALLBACK (selection_changed), |
| 360 |
dialog); |
| 361 |
|
| 362 |
gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), |
| 363 |
RESPONSE_OPEN_EXISTING_DISPLAY, |
| 364 |
FALSE); |
| 365 |
|
| 366 |
gtk_widget_show_all (dialog); |
| 367 |
|
| 368 |
run_again: |
| 369 |
switch (gtk_dialog_run (GTK_DIALOG (dialog))) { |
| 370 |
case RESPONSE_OPEN_NEW_DISPLAY: |
| 371 |
gtk_widget_destroy (dialog); |
| 372 |
/* just continue what you are doing */ |
| 373 |
return; |
| 374 |
|
| 375 |
case RESPONSE_OPEN_EXISTING_DISPLAY: |
| 376 |
if (gtk_tree_selection_get_selected (selection, NULL, &iter)) { |
| 377 |
GValue value = {0}; |
| 378 |
int vt; |
| 379 |
gtk_tree_model_get_value (model, &iter, |
| 380 |
COLUMN_VT, |
| 381 |
&value); |
| 382 |
vt = g_value_get_int (&value); |
| 383 |
g_value_unset (&value); |
| 384 |
|
| 385 |
/* we switched to a different screen as a result of this, |
| 386 |
* lock the current screen */ |
| 387 |
if ( ! no_lock && vt != get_cur_vt () && vt >= 0) { |
| 388 |
char *argv[3] = {"xscreensaver-command", "-lock", NULL}; |
| 389 |
if (gnome_execute_async (g_get_home_dir (), 2, argv) < 0) |
| 390 |
g_warning (_("Can't lock screen")); |
| 391 |
argv[1] = "-throttle"; |
| 392 |
if (gnome_execute_async (g_get_home_dir (), 2, argv) < 0) |
| 393 |
g_warning (_("Can't disable xscreensaver display hacks")); |
| 394 |
} |
| 395 |
|
| 396 |
change_vt (vt); |
| 397 |
|
| 398 |
/* FIXME: wait + disturb the pointer (need SUP?), perhaps |
| 399 |
* part of the sup command to CHVT ?? */ |
| 400 |
|
| 401 |
exit (0); |
| 402 |
} else { |
| 403 |
/* EEK */ |
| 404 |
goto run_again; |
| 405 |
} |
| 406 |
break; |
| 407 |
|
| 408 |
default: |
| 409 |
gtk_widget_destroy (dialog); |
| 410 |
/* cancel, or close */ |
| 411 |
exit (0); |
| 412 |
break; |
| 413 |
} |
| 414 |
} |
302 |
} |
| 415 |
|
303 |
|
| 416 |
static void |
304 |
static void |