Reputation: 21
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
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