Sciamano
Sciamano

Reputation: 21

Gtk does not detect the window either in fullscreen or unfullscreen

Here is a piece of my project ... and i have a problem with the fullscreen function:

#include "header.h"

gboolean  my_gtk_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
{
  GdkWindow *window = gtk_widget_get_window(widget);

  GdkWindowState state = gdk_window_get_state(GDK_WINDOW(window));

  switch(event->keyval) {
  case GDK_KEY_F11:
    if(state == GDK_WINDOW_STATE_FULLSCREEN) {
      gtk_window_unfullscreen(GTK_WINDOW(widget));
    }
    else {
      gtk_window_fullscreen(GTK_WINDOW(widget));
    }

    printf("win_state %d\n", state);
    printf("gdk_state %d\n", GDK_WINDOW_STATE_FULLSCREEN);

    break;
  case GDK_KEY_Escape:
    destroy(NULL, NULL);
  break;
  }
}

int main(int argc, char **argv)
{
  GtkWidget *win;
  char *s = "In progress";

  gtk_init(&argc, &argv);

  win = win_principal(win, s, 600, 400, 10);

  g_signal_connect(G_OBJECT(win), "key-press-event", G_CALLBACK(my_gtk_key_press_event), NULL);

  g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(destroy), NULL);

  gtk_widget_show_all(win);

  gtk_main();

  return 0;
}

When in unfullscreen it prints 128 while in fullscreen it prints 144 And the value of GDK_WINDOW_STATE_FULLSCREEN is equal to 16 ... how can I solve this problem? Or what is wrong?

Upvotes: 1

Views: 652

Answers (1)

José Fonte
José Fonte

Reputation: 4114

GDK_WINDOW_STATE_FULLSCREEN is a bit flag, so, you cannot compare the state directly as you are doing but do a bitwise operation.

Change:

if (state == GDK_WINDOW_STATE_FULLSCREEN)

To:

if (state & GDK_WINDOW_STATE_FULLSCREEN)

Here is your code, without dependencies:

#include <gtk/gtk.h>

gboolean  my_gtk_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
{
  GdkWindow *window = gtk_widget_get_window(widget);

  GdkWindowState state = gdk_window_get_state(GDK_WINDOW(window));

  switch(event->keyval) {
  case GDK_KEY_F11:
    if (state & GDK_WINDOW_STATE_FULLSCREEN) {
      gtk_window_unfullscreen(GTK_WINDOW(widget));
    }
    else {
      gtk_window_fullscreen(GTK_WINDOW(widget));
    }
    break;
  case GDK_KEY_Escape:
    gtk_main_quit ();
  break;
  }
}

int main(int argc, char **argv)
{
  GtkWidget *win;
  char *s = "In progress";

  gtk_init(&argc, &argv);

  //win = win_principal(win, s, 600, 400, 10);
  win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_default_size (GTK_WINDOW(win), 640, 400);

  g_signal_connect(G_OBJECT(win), "key-press-event", G_CALLBACK(my_gtk_key_press_event), win);

  g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(gtk_main_quit), NULL);

  gtk_widget_show_all(win);

  gtk_main();

  return 0;
}

Compile with:

gcc -o window window.c `pkg-config --cflags --libs gtk+-3.0`

The window will toggle Fullscreen with F11 and close with Esc.

Upvotes: 1

Related Questions