Environment: Ubuntu 12.04 with Unity Hi, i have a problem using gtk_window_move with gnome. There are two windows, and a function to move one window (not decorated) respect to the other window (decorated) using gtk_window_move. The problem is the result. Because not always is the expected. Sometimes the window (undecorated) position is wrong. This situation appear first when i use gtkwebkit with the undecorated parent. Then i try without gtkwebkit, and usually works but not always. So try more times if you choose the option without gtkwebkit. The problem is show better if you attach a gtkwebkit to the not decorated window (uncomment code in the main.c). This program works in Ubuntu 12.04 with XFCE and not in Ubuntu 12.04 with gnome. Can someone help me please? I send you the main.c. Compile: gcc -o main main.c `pkg-config --cflags --libs gtk+-2.0 webkit-1.0` RealPos: http://imageshack.us/a/img404/861/realpos.png BadPos: http://imageshack.us/a/img840/5949/badpos.png BadPos2: http://imageshack.us/a/img705/3136/badpos2.png BadPosWithWebKit: http://imageshack.us/a/img441/4392/badposwithwebkit.png RealPosWithWebKit: http://imageshack.us/a/img528/4655/realposwithwebkit.png
#include <gtk/gtk.h> #include <webkit/webkit.h> typedef struct Size { int x; int y; int w; int h; } Size; void move(GtkWidget *videoOverlay,GtkWidget *_main, int x, int y){ gint xOrigin,yOrigin,borderLeft,borderBottom; GdkRectangle fRect; GdkWindow *window = gtk_widget_get_window(_main); // Getting window gdk_window_get_origin(window, &xOrigin,&yOrigin); // Parent's left-top screen coordinates gdk_window_get_frame_extents( window, &fRect ); // Getting size and position including decorations //Calculating borders borderLeft = (fRect.width-720)/2; borderBottom = fRect.height - (576 + (yOrigin-fRect.y)); gtk_window_move( GTK_WINDOW(videoOverlay), fRect.x+(fRect.width-720)+x-borderLeft, fRect.y+(fRect.height-576)+y-borderBottom ); } void resize(GtkWidget *_overlay, int w, int h){ GdkGeometry hints; hints.min_width = w; hints.min_height = h; hints.width_inc = w; hints.height_inc = h; GdkWindowHints mask = (GdkWindowHints) (GDK_HINT_RESIZE_INC | GDK_HINT_MIN_SIZE ); gtk_window_set_geometry_hints (GTK_WINDOW (_overlay), _overlay, &hints, mask); } static void on_window_destroyed( GtkWidget * widget, gpointer user_data ) { gtk_main_quit(); } int main(int argc, char * argv[]){ GtkWidget *_window,*_overlay,*_view; Size s; gtk_init(NULL, NULL); // Main window initialization _window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(_window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(_window), 720, 576); gtk_window_set_title(GTK_WINDOW(_window), "Sample"); gtk_widget_set_double_buffered(_window, FALSE); // Set background color GdkColor color; gdk_color_parse ("black", &color); gtk_widget_modify_bg (_window, GTK_STATE_NORMAL, &color); // Connect signals g_signal_connect( GTK_OBJECT(_window), "destroy", G_CALLBACK (on_window_destroyed), NULL); gtk_widget_show(_window); // Create Overlay _overlay = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_decorated (GTK_WINDOW (_overlay), FALSE); gtk_window_set_resizable (GTK_WINDOW(_overlay), FALSE); gtk_window_set_skip_taskbar_hint( GTK_WINDOW(_overlay), TRUE ); gtk_window_set_transient_for(GTK_WINDOW(_overlay),GTK_WINDOW(_window)); gtk_window_set_accept_focus( GTK_WINDOW(_overlay), FALSE ); gtk_window_set_destroy_with_parent( GTK_WINDOW(_overlay), TRUE ); gtk_widget_realize(_overlay); // Set overlay position s.y=s.x=0; move(_overlay,_window, s.x, s.y); // Set overlay size s.w=720; s.h=576; resize(_overlay, s.w, s.h); gdk_window_restack( gtk_widget_get_window(_overlay), gtk_widget_get_window(_window), FALSE ); gtk_widget_show(_overlay); /* // Create WebKit _view = webkit_web_view_new (); // Setup webkit webkit_web_view_set_full_content_zoom( WEBKIT_WEB_VIEW (_view), TRUE ); webkit_web_view_set_transparent( WEBKIT_WEB_VIEW (_view), TRUE ); // Load url webkit_web_view_load_uri (WEBKIT_WEB_VIEW (_view), "http://google.com.ar" ); //Show webkit gtk_container_add(GTK_CONTAINER(_overlay),_view); gtk_widget_show (_view); */ // Move and resize overlay s.y=100; s.x=100; s.w=620; s.h=476; move(_overlay,_window, s.x, s.y); resize(_overlay, s.w, s.h); // Run loop gtk_main(); return 0; }
_______________________________________________ gtk-list mailing list gtk-list@xxxxxxxxx https://mail.gnome.org/mailman/listinfo/gtk-list