Проверьте, есть ли в окне GTK окно фокуса клавиатуры и мыши C ++ - PullRequest
1 голос
/ 26 мая 2020

Есть ли функция GTK3, которая определяет, есть ли у окна фокус? В настоящее время я использую следующий код:

#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
GtkWidget *LinuxWindow;
static void buttonMessage(GtkWidget *widget, gpointer data)
{
  g_print("Yay, you clicked me!\n");
}
int main() {
  GtkWidget *Box, *Button;
  int argC = 0;
  char **argV;
  // Setup the window and fixed grid
  gtk_init(&argC, &argV);
  LinuxWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  Box = gtk_fixed_new();
  // Set the title
  gtk_window_set_title(GTK_WINDOW(LinuxWindow), "Title");
  // Setup the window events
  gtk_widget_show_all(LinuxWindow);
  g_signal_connect(G_OBJECT(LinuxWindow), "destroy", G_CALLBACK(gtk_main_quit),
                   NULL);
  // Add controls
  Button = gtk_button_new_with_label("Click Me!");
  g_signal_connect(Button, "clicked", G_CALLBACK(buttonMessage), NULL);
  gtk_fixed_put(GTK_FIXED(Box), Button, 20, 20);
  gtk_fixed_move(GTK_FIXED(Box), Button, 20, 20);
  gtk_widget_set_size_request(Button, 30, 100);
  gtk_container_add(GTK_CONTAINER(LinuxWindow), Box);
  gtk_widget_show_all(LinuxWindow);
  // Create a dialog
  GtkWidget *dialog;
  dialog = gtk_message_dialog_new(
      GTK_WINDOW(LinuxWindow), GTK_DIALOG_DESTROY_WITH_PARENT,
      GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Hello and welcome to my GTK GUI...", NULL);
  gint ret = gtk_dialog_run(GTK_DIALOG(dialog));
  gtk_widget_destroy(GTK_WIDGET(dialog));
  printf("%i", ret);
  // Add the fixed grid and go the to the main window loop

  gtk_main();

  return 0;
}

Я компилирую его, используя

g++ -std=c++17 -m64 -o gtkTest myGtkApp.cpp -lX11 `pkg-config --cflags gtk+-3.0` `pkg-config --libs gtk+-3.0`

Я хочу определить, сфокусировано ли окно, и распечатать его на консоли.

1 Ответ

1 голос
/ 30 мая 2020

Существует функция: gtk_widget_is_focus () .

Вам нужно убедиться, что у родителей установлено свойство «has-focus». Сделайте c. выдержка:

gtk_widget_is_focus (GtkWidget *widget);

Определяет, является ли виджет виджетом фокуса на своем верхнем уровне. (Это не означает, что свойство «has-focus» обязательно установлено; «has-focus» будет установлено только в том случае, если виджет верхнего уровня дополнительно имеет глобальный фокус ввода.)

Если вы хотите чтобы получить событие, когда окно сфокусировано, зарегистрируйте обратный вызов для enter-notify-event ( signal )

в связанном do c. есть раздел всего через три точки после enter-notify-event, это то, что вы хотите:

Сигнал «фокус»

Извините, мне нужно упомянуть это событие, первый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...