2
votes

I have an application which I have made using gtk and c. It runs on full screen mode and displays data on a label. I need to hide the mouse pointer as soon as the application starts and then unhide it when the application stops.

How to do it.

This is my main window:

GtkWidget *window = NULL;

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  
gtk_widget_set_size_request((window),640,480);  
gtk_widget_realize (window);
gtk_window_fullscreen((GtkWindow*)window);      
3

3 Answers

1
votes

Phew, that was a rabbit hole of deprecation!

It seems, from a quick skim of the docs, that the current best bet is the gdk_seat_grab() function. It has a bunch of arguments, one of them is a GdkCursor *. The cursor is set while the grab is active.

You should be able to use gdk_cursor_new_for_display() with GDK_BLANK_CURSOR to get a blank cursor to use.

You can get the default display using the gdk_display_get_default() function. This is usually enough unless you need to think about multi-display support; anyway this should get you started with the APIs.

1
votes

This is how I have done it:

GdkCursor* Cursor = gdk_cursor_new(GDK_BLANK_CURSOR);
GdkWindow* win = gtk_widget_get_window((window));
gdk_window_set_cursor((win),Cursor);
0
votes

You actually don't need gdk_seat_grab(); what you really want is gdk_window_set_cursor(). And for using an invisible cursor, you can use gdk_cursor_new_from_name() to load the "none" cursor, which is typically handled explicitly by GDK backend implementations to return a blank cursor. The Cursors example in gtk3-demo gives you an example of how to use it.

Noote that this means if GTK+ ever unrealizes your window for any reason, you'll ahve to reset your cursor. So you may want to connect to the two realization signals to do the assignment.