Mercurial > dwindows
comparison gtk/dw.c @ 1470:a317c2ec1d4c
On GTK2 gtk_window_move() needs to be called after mapping the window...
but before calling gdk_window_get_frame_extents() so do it in another step.
Also a couple minor code fixes on GTK2 and GTK3.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Tue, 20 Dec 2011 14:30:10 +0000 |
parents | b9efb744cfbd |
children | 26dbd11399d6 |
comparison
equal
deleted
inserted
replaced
1469:b9efb744cfbd | 1470:a317c2ec1d4c |
---|---|
2658 */ | 2658 */ |
2659 int dw_window_show(HWND handle) | 2659 int dw_window_show(HWND handle) |
2660 { | 2660 { |
2661 int _locked_by_me = FALSE; | 2661 int _locked_by_me = FALSE; |
2662 GtkWidget *defaultitem; | 2662 GtkWidget *defaultitem; |
2663 int x = 0, y = 0; | |
2663 #if GTK_MAJOR_VERSION > 1 | 2664 #if GTK_MAJOR_VERSION > 1 |
2664 GtkWidget *mdi; | 2665 GtkWidget *mdi; |
2665 #endif | 2666 #endif |
2666 | 2667 |
2667 if (!handle) | 2668 if (!handle) |
2668 return 0; | 2669 return 0; |
2669 | 2670 |
2670 DW_MUTEX_LOCK; | 2671 DW_MUTEX_LOCK; |
2672 /* GTK 2 needs extra help moving the window after being mapped */ | |
2673 if(!GTK_WIDGET_MAPPED(handle)) | |
2674 { | |
2675 x = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_absolutex")); | |
2676 y = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_absolutey")); | |
2677 } | |
2671 gtk_widget_show(handle); | 2678 gtk_widget_show(handle); |
2672 #if GTK_MAJOR_VERSION > 1 | 2679 #if GTK_MAJOR_VERSION > 1 |
2673 if ((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) | 2680 if ((mdi = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "_dw_mdi")) && GTK_IS_MDI(mdi)) |
2674 { | 2681 { |
2675 gtk_mdi_set_state(GTK_MDI(mdi), handle, CHILD_NORMAL); | 2682 gtk_mdi_set_state(GTK_MDI(mdi), handle, CHILD_NORMAL); |
2676 } | 2683 } |
2677 else | 2684 else |
2678 #endif | 2685 #endif |
2679 { | 2686 if(GTK_IS_WINDOW(handle)) |
2687 { | |
2688 /* Move the window to where it should be so gdk_window_get_frame_extents() | |
2689 * called from dw_window_set_pos() and dw_window_set_size() don't make the | |
2690 * window appear in a bad location on the screen. | |
2691 */ | |
2692 if(x || y) | |
2693 { | |
2694 gtk_window_move(GTK_WINDOW(handle), x, y); | |
2695 /* Clear out the data so we don't do it again */ | |
2696 gtk_object_set_data(GTK_OBJECT(handle), "_dw_absolutex", NULL); | |
2697 gtk_object_set_data(GTK_OBJECT(handle), "_dw_absolutey", NULL); | |
2698 } | |
2680 if (GTK_WIDGET(handle)->window) | 2699 if (GTK_WIDGET(handle)->window) |
2681 { | 2700 { |
2682 int width = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_width")); | 2701 int width = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_width")); |
2683 int height = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_height")); | 2702 int height = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_height")); |
2684 | 2703 |
2693 } | 2712 } |
2694 | 2713 |
2695 /* If we had a position request before shown */ | 2714 /* If we had a position request before shown */ |
2696 if (gtk_object_get_data(GTK_OBJECT(handle), "_dw_pos")) | 2715 if (gtk_object_get_data(GTK_OBJECT(handle), "_dw_pos")) |
2697 { | 2716 { |
2698 int x = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_x")); | 2717 x = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_x")); |
2699 int y = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_y")); | 2718 y = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_y")); |
2700 | 2719 |
2701 /* Call the position function again now that we are realized */ | 2720 /* Call the position function again now that we are realized */ |
2702 dw_window_set_pos(handle, x, y); | 2721 dw_window_set_pos(handle, x, y); |
2703 /* Clear out the data so we don't do it again */ | 2722 /* Clear out the data so we don't do it again */ |
2704 gtk_object_set_data(GTK_OBJECT(handle), "_dw_pos", NULL); | 2723 gtk_object_set_data(GTK_OBJECT(handle), "_dw_pos", NULL); |
10385 gtk_object_set_data(GTK_OBJECT(handle), "_dw_y", GINT_TO_POINTER(y)); | 10404 gtk_object_set_data(GTK_OBJECT(handle), "_dw_y", GINT_TO_POINTER(y)); |
10386 gtk_object_set_data(GTK_OBJECT(handle), "_dw_pos", GINT_TO_POINTER(1)); | 10405 gtk_object_set_data(GTK_OBJECT(handle), "_dw_pos", GINT_TO_POINTER(1)); |
10387 /* Check to see if there is a pending size request too */ | 10406 /* Check to see if there is a pending size request too */ |
10388 width = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_width")); | 10407 width = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_width")); |
10389 height = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_height")); | 10408 height = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(handle), "_dw_height")); |
10390 if(width | height) | 10409 if(!width || !height) |
10391 { | 10410 { |
10392 /* Ask what GTK is planning on suggesting for the window size */ | 10411 /* Ask what GTK is planning on suggesting for the window size */ |
10393 gtk_window_get_size(GTK_WINDOW(handle), !width ? &width : NULL, !height ? &height : NULL); | 10412 gtk_window_get_size(GTK_WINDOW(handle), !width ? &width : NULL, !height ? &height : NULL); |
10394 } | 10413 } |
10395 /* Add the frame size to it */ | 10414 /* Add the frame size to it */ |
10409 if((vert & 0xf) == DW_GRAV_CENTER) | 10428 if((vert & 0xf) == DW_GRAV_CENTER) |
10410 newy += ((gdk_screen_height() / 2) - (height / 2)); | 10429 newy += ((gdk_screen_height() / 2) - (height / 2)); |
10411 else if((vert & 0xf) == DW_GRAV_BOTTOM) | 10430 else if((vert & 0xf) == DW_GRAV_BOTTOM) |
10412 newy = gdk_screen_height() - height - x; | 10431 newy = gdk_screen_height() - height - x; |
10413 } | 10432 } |
10414 /* Finally move the window into place */ | 10433 if(GTK_WIDGET_MAPPED(handle)) |
10415 gtk_window_move(GTK_WINDOW(handle), newx, newy); | 10434 { |
10435 /* Finally move the window into place */ | |
10436 gtk_window_move(GTK_WINDOW(handle), newx, newy); | |
10437 } | |
10438 else | |
10439 { | |
10440 gtk_object_set_data(GTK_OBJECT(handle), "_dw_absolutex", GINT_TO_POINTER(newx)); | |
10441 gtk_object_set_data(GTK_OBJECT(handle), "_dw_absolutey", GINT_TO_POINTER(newy)); | |
10442 } | |
10416 #else | 10443 #else |
10417 gtk_widget_set_uposition(handle, x, y); | 10444 gtk_widget_set_uposition(handle, x, y); |
10418 #endif | 10445 #endif |
10419 } | 10446 } |
10420 else if(handle->window) | 10447 else if(handle->window) |
10469 if(handle && handle->window) | 10496 if(handle && handle->window) |
10470 { | 10497 { |
10471 /* If it is a toplevel window */ | 10498 /* If it is a toplevel window */ |
10472 if(GTK_IS_WINDOW(handle)) | 10499 if(GTK_IS_WINDOW(handle)) |
10473 { | 10500 { |
10474 if(handle->window && gdk_window_is_visible(handle->window)) | 10501 if(handle->window && GTK_WIDGET_MAPPED(handle)) |
10475 { | 10502 { |
10476 GdkRectangle frame; | 10503 GdkRectangle frame; |
10477 | 10504 |
10478 /* Calculate the border rectangle */ | 10505 /* Calculate the border rectangle */ |
10479 gdk_window_get_frame_extents(handle->window, &frame); | 10506 gdk_window_get_frame_extents(handle->window, &frame); |