системный модальный диалог в GTK - PullRequest
0 голосов
/ 02 сентября 2010

Я пытаюсь создать GtkDialog с общесистемным модальным свойством, т.е. когда диалог открыт, никакое другое окно не должно получить фокус.Существует возможность сделать его модальным с помощью GtkDialogFlag, но это не модально для всей системы.

1 Ответ

1 голос
/ 03 сентября 2010

Это ужасная ужасная идея, но вы можете переопределить обработчик "focus-out-event" для своего окна и вызвать его gtk_window_present.

Что-то вроде gksu делает:

static gboolean
focus_out_cb (GtkWidget *widget, GdkEventFocus *event, gpointer user_data)
{
  gtk_window_present (GTK_WINDOW(widget));
  return TRUE;
}

//in your initialization code for your window...
/* make sure that our window will always have the focus */
g_signal_connect (G_OBJECT(mywindow), "focus-out-event",
          G_CALLBACK(focus_out_cb), NULL);

Надеемся, что это дает дополнительное преимущество: если ваше приложение останавливает зависание, сигнал для события focus-out, скорее всего, не будет обработан. Я не уверен, как GTK выполняет потоки пользовательского интерфейса, но я думаю, что это должно быть правдой.

...