Re: Making widgets visible outside their containing window
Maybe the answer to your question is simply No You are displaying stuff in your window Generally the windows manager decides where on the screen to put stuff, so you can either use your existing window and allow GTK to display things as it thinks fit, which may not be what you expect. (Note the comments about gtk_fixed in the documentation) or open a new top-level window set transient to the main window, which sometimes positions things where you expect. However the window manager decides where to put the new window and with dual screens this can be interesting. Best approach might be to use a (possibly) modal dialog, which the user can move out the way if he needs to. It this is not acceptable, then your only choice is to display a complex widget on the main window, maybe with a close button to destroy it if apprpriate Rgds Bill On 13/07/11 06:57, Sam Spilsbury wrote: 2011/7/13 Felix H. Dahlkef...@ubercode.de: Hi, I'm fairly new to GTK (using version 2.24), and I'm wondering if I can move a widget (partly) outside the area of a window and still have it displayed. Consider the following code, where I've tried to use a GtkFixed to position a label partly outside the window: == int main(int argc, char* argv[]) { gtk_init(argc,argv); GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window), 320, 240); gtk_container_border_width(GTK_CONTAINER(window), 10); gtk_widget_show(window); GtkWidget* fixed = gtk_fixed_new(); gtk_widget_set_has_window(fixed, TRUE); // Doesn't help gtk_container_add(GTK_CONTAINER(window), fixed); gtk_widget_show(fixed); GtkWidget* label = gtk_label_new(Hello World); // y = 238 should position the label partly outside the window gtk_fixed_put((GtkFixed*) fixed, label, 0, 238); gtk_widget_show(label); gtk_main(); return 0; } == This is how I want it to look: --- | | | | | | | | |-- | -|| || -- And this is how it actually looks: --- | | | | | | |-- | ||| | ||| | |-- | --- As you can see from the comments, I already tried to use gtk_widget_set_has_window(fixed, TRUE), but it didn't do the trick. How can I do this? I can't say I know Gtk+ in any high level of detail, but just using my basic knowledge of X11 here, I'd say that gtk_widget_set_has_window (fixed, TRUE); is probably only giving the widget a subwindow of the toplevel window of your application and not another toplevel window in and of itself If you wanted to have that part of your widget appearing outside of the client window you'd need to create a new GtkWindow which is override-redirect (I believe the way to do this is to specify GTK_WINDOW_POPUP on creation) and set the WM_TRANSIENT_FOR hint to be your client's application window. Then you can draw whatever you want there and it will be outside of (albeit on top of) the application. ___ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list ___ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
Re: Making widgets visible outside their containing window
Thanks for your answers. I did fool around with a popup, but it would also overlap other windows, transient or not. Furthermore, I need it to move relative to the window if that is moved. Maybe it's best if I tell you what I'm trying to do in particular: I'm working on something like a tooltip. However, I don't think I can use normal tooltips, since I need to position it manually (actually, I need it to move out of the way if the mouse cursor approaches it). A popup sounds like the right way to do this, but I need to somehow wire the popup's movement to the window's movement. Is there an easy way to do that? On 07/13/2011 03:53 PM, Bill Czermak wrote: Maybe the answer to your question is simply No You are displaying stuff in your window Generally the windows manager decides where on the screen to put stuff, so you can either use your existing window and allow GTK to display things as it thinks fit, which may not be what you expect. (Note the comments about gtk_fixed in the documentation) or open a new top-level window set transient to the main window, which sometimes positions things where you expect. However the window manager decides where to put the new window and with dual screens this can be interesting. Best approach might be to use a (possibly) modal dialog, which the user can move out the way if he needs to. It this is not acceptable, then your only choice is to display a complex widget on the main window, maybe with a close button to destroy it if apprpriate Rgds Bill On 13/07/11 06:57, Sam Spilsbury wrote: 2011/7/13 Felix H. Dahlkef...@ubercode.de: Hi, I'm fairly new to GTK (using version 2.24), and I'm wondering if I can move a widget (partly) outside the area of a window and still have it displayed. Consider the following code, where I've tried to use a GtkFixed to position a label partly outside the window: == int main(int argc, char* argv[]) { gtk_init(argc,argv); GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window), 320, 240); gtk_container_border_width(GTK_CONTAINER(window), 10); gtk_widget_show(window); GtkWidget* fixed = gtk_fixed_new(); gtk_widget_set_has_window(fixed, TRUE); // Doesn't help gtk_container_add(GTK_CONTAINER(window), fixed); gtk_widget_show(fixed); GtkWidget* label = gtk_label_new(Hello World); // y = 238 should position the label partly outside the window gtk_fixed_put((GtkFixed*) fixed, label, 0, 238); gtk_widget_show(label); gtk_main(); return 0; } == This is how I want it to look: --- | | | | | | | | |-- | -|| || -- And this is how it actually looks: --- | | | | | | |-- | ||| | ||| | |-- | --- As you can see from the comments, I already tried to use gtk_widget_set_has_window(fixed, TRUE), but it didn't do the trick. How can I do this? I can't say I know Gtk+ in any high level of detail, but just using my basic knowledge of X11 here, I'd say that gtk_widget_set_has_window (fixed, TRUE); is probably only giving the widget a subwindow of the toplevel window of your application and not another toplevel window in and of itself If you wanted to have that part of your widget appearing outside of the client window you'd need to create a new GtkWindow which is override-redirect (I believe the way to do this is to specify GTK_WINDOW_POPUP on creation) and set the WM_TRANSIENT_FOR hint to be your client's application window. Then you can draw whatever you want there and it will be outside of (albeit on top of) the application. ___ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list ___ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list ___ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
Re: Making widgets visible outside their containing window
2011/7/13 Felix H. Dahlke f...@ubercode.de: Thanks for your answers. I did fool around with a popup, but it would also overlap other windows, transient or not. Furthermore, I need it to move relative to the window if that is moved. Maybe it's best if I tell you what I'm trying to do in particular: I'm working on something like a tooltip. However, I don't think I can use normal tooltips, since I need to position it manually (actually, I need it to move out of the way if the mouse cursor approaches it). A popup sounds like the right way to do this, but I need to somehow wire the popup's movement to the window's movement. Is there an easy way to do that? Take a look at PHAT fan sliders. These are sliders which vertical-mouse-movement brings up a fan through which the user gains more precision in the slider position. The fans are not bounded by any window the widget is associated with. There might be some pointers in there for how to do what you want, but note it's unmaintained code by now, and also contains some deprecated code. http://phat.berlios.de/ James. ___ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list