I am trying to drag and drop(move) the GtkWindow on the screen, by clicking(& holding) on its child widget. This is my script, which is working, but it shows warning when compiling: ‘gtk_widget_translate_coordinates’ deprecated: use ‘gtk_widget_compute_point’ instead.
Can someone tell me how to implement the gtk_widget_compute_point function?
#include <gtk/gtk.h>
static void
start_move (GtkGestureClick *gesture,
int n_press,
double x,
double y,
gpointer data)
{
GtkWidget *widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture));
GdkSurface *surface;
GdkEvent *event;
guint button;
guint32 timestamp;
gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
surface = gtk_native_get_surface (gtk_widget_get_native (widget));
event = gtk_event_controller_get_current_event (GTK_EVENT_CONTROLLER (gesture));
if (gdk_event_get_event_type (event) == GDK_BUTTON_PRESS)
button = gdk_button_event_get_button (event);
else
button = 0;
timestamp = gdk_event_get_time (event);
gtk_widget_translate_coordinates (widget, GTK_WIDGET (gtk_widget_get_root (widget)), x, y, &x, &y);
gdk_toplevel_begin_move (GDK_TOPLEVEL (surface), gdk_event_get_device (event), button, x, y, timestamp);
gtk_event_controller_reset (GTK_EVENT_CONTROLLER (gesture));
}
static void
activate (GtkApplication *app,
gpointer user_data)
{
GtkWidget *window = gtk_application_window_new (app);
gtk_window_set_title (GTK_WINDOW (window), "example");
GtkWidget *fixed = gtk_fixed_new ();
gtk_window_set_child ((GtkWindow *)window, fixed);
gtk_widget_set_size_request (fixed, 400, 200);
GtkWidget *c_btn = gtk_button_new_from_icon_name ("window-close-symbolic");
gtk_fixed_put (GTK_FIXED (fixed), c_btn, 125, 90);
GtkGesture *gesture;
gesture = gtk_gesture_click_new ();
g_signal_connect (gesture, "pressed", G_CALLBACK (start_move), NULL);
gtk_widget_add_controller (c_btn, GTK_EVENT_CONTROLLER (gesture));
gtk_window_present ((GtkWindow*)window);
}
int
main (int argc,
char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
return status;
}
You need to sign in to view this answers
Leave feedback about this