applied the undisputable and required [due to recent gtkfilesystem

2004-03-20  Hans Breuer  <hans@breuer.org>

	* gtk/gtkfilesystemwin32.c : applied the undisputable and
	required [due to recent gtkfilesystem internal api semantic
	changes] part of patches to fix bug #137543 (Tor Lillqvist,
	J. Ali Harlow)

	* gdk/gdkevents-win32.c (handle_configure_event) :
             (gdk_event_translate), WM_WINDOWPOSCHANGED : initialize
	GdkWindowObject::x, y with screen coords to make
	gdk_window_get_position () return the right thing and thus fix
	drag and drop positioning (e.g. Gimp tabs, fixes bug #137192)
This commit is contained in:
Hans Breuer 2004-03-20 23:45:35 +00:00 committed by Hans Breuer
parent 3483a90d40
commit f0afa3a497
7 changed files with 120 additions and 21 deletions

View File

@ -1,3 +1,16 @@
2004-03-20 Hans Breuer <hans@breuer.org>
* gtk/gtkfilesystemwin32.c : applied the undisputable and
required [due to recent gtkfilesystem internal api semantic
changes] part of patches to fix bug #137543 (Tor Lillqvist,
J. Ali Harlow)
* gdk/gdkevents-win32.c (handle_configure_event) :
(gdk_event_translate), WM_WINDOWPOSCHANGED : initialize
GdkWindowObject::x, y with screen coords to make
gdk_window_get_position () return the right thing and thus fix
drag and drop positioning (e.g. Gimp tabs, fixes bug #137192)
2004-03-19 Federico Mena Quintero <federico@ximian.com> 2004-03-19 Federico Mena Quintero <federico@ximian.com>
* Revert the patch to #137520, as 2.4.1 is for conservative bug * Revert the patch to #137520, as 2.4.1 is for conservative bug

View File

@ -1,3 +1,16 @@
2004-03-20 Hans Breuer <hans@breuer.org>
* gtk/gtkfilesystemwin32.c : applied the undisputable and
required [due to recent gtkfilesystem internal api semantic
changes] part of patches to fix bug #137543 (Tor Lillqvist,
J. Ali Harlow)
* gdk/gdkevents-win32.c (handle_configure_event) :
(gdk_event_translate), WM_WINDOWPOSCHANGED : initialize
GdkWindowObject::x, y with screen coords to make
gdk_window_get_position () return the right thing and thus fix
drag and drop positioning (e.g. Gimp tabs, fixes bug #137192)
2004-03-19 Federico Mena Quintero <federico@ximian.com> 2004-03-19 Federico Mena Quintero <federico@ximian.com>
* Revert the patch to #137520, as 2.4.1 is for conservative bug * Revert the patch to #137520, as 2.4.1 is for conservative bug

View File

@ -1,3 +1,16 @@
2004-03-20 Hans Breuer <hans@breuer.org>
* gtk/gtkfilesystemwin32.c : applied the undisputable and
required [due to recent gtkfilesystem internal api semantic
changes] part of patches to fix bug #137543 (Tor Lillqvist,
J. Ali Harlow)
* gdk/gdkevents-win32.c (handle_configure_event) :
(gdk_event_translate), WM_WINDOWPOSCHANGED : initialize
GdkWindowObject::x, y with screen coords to make
gdk_window_get_position () return the right thing and thus fix
drag and drop positioning (e.g. Gimp tabs, fixes bug #137192)
2004-03-19 Federico Mena Quintero <federico@ximian.com> 2004-03-19 Federico Mena Quintero <federico@ximian.com>
* Revert the patch to #137520, as 2.4.1 is for conservative bug * Revert the patch to #137520, as 2.4.1 is for conservative bug

View File

@ -1,3 +1,16 @@
2004-03-20 Hans Breuer <hans@breuer.org>
* gtk/gtkfilesystemwin32.c : applied the undisputable and
required [due to recent gtkfilesystem internal api semantic
changes] part of patches to fix bug #137543 (Tor Lillqvist,
J. Ali Harlow)
* gdk/gdkevents-win32.c (handle_configure_event) :
(gdk_event_translate), WM_WINDOWPOSCHANGED : initialize
GdkWindowObject::x, y with screen coords to make
gdk_window_get_position () return the right thing and thus fix
drag and drop positioning (e.g. Gimp tabs, fixes bug #137192)
2004-03-19 Federico Mena Quintero <federico@ximian.com> 2004-03-19 Federico Mena Quintero <federico@ximian.com>
* Revert the patch to #137520, as 2.4.1 is for conservative bug * Revert the patch to #137520, as 2.4.1 is for conservative bug

View File

@ -1,3 +1,16 @@
2004-03-20 Hans Breuer <hans@breuer.org>
* gtk/gtkfilesystemwin32.c : applied the undisputable and
required [due to recent gtkfilesystem internal api semantic
changes] part of patches to fix bug #137543 (Tor Lillqvist,
J. Ali Harlow)
* gdk/gdkevents-win32.c (handle_configure_event) :
(gdk_event_translate), WM_WINDOWPOSCHANGED : initialize
GdkWindowObject::x, y with screen coords to make
gdk_window_get_position () return the right thing and thus fix
drag and drop positioning (e.g. Gimp tabs, fixes bug #137192)
2004-03-19 Federico Mena Quintero <federico@ximian.com> 2004-03-19 Federico Mena Quintero <federico@ximian.com>
* Revert the patch to #137520, as 2.4.1 is for conservative bug * Revert the patch to #137520, as 2.4.1 is for conservative bug

View File

@ -1685,23 +1685,25 @@ handle_configure_event (MSG *msg,
GdkWindow *window) GdkWindow *window)
{ {
RECT client_rect; RECT client_rect;
POINT point;
GetClientRect (msg->hwnd, &client_rect); GetClientRect (msg->hwnd, &client_rect);
point.x = client_rect.left; /* always 0 */
point.y = client_rect.top;
/* top level windows need screen coords */
if (GDK_WINDOW_TYPE (window) == GDK_WINDOW_TOPLEVEL)
ClientToScreen (msg->hwnd, &point);
GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->width = client_rect.right - client_rect.left; GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->width = client_rect.right - client_rect.left;
GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->height = client_rect.bottom - client_rect.top; GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->height = client_rect.bottom - client_rect.top;
((GdkWindowObject *) window)->x = client_rect.left; ((GdkWindowObject *) window)->x = point.x;
((GdkWindowObject *) window)->y = client_rect.top; ((GdkWindowObject *) window)->y = point.y;
if (((GdkWindowObject *) window)->event_mask & GDK_STRUCTURE_MASK) if (((GdkWindowObject *) window)->event_mask & GDK_STRUCTURE_MASK)
{ {
POINT point;
GdkEvent *event = gdk_event_new (GDK_CONFIGURE); GdkEvent *event = gdk_event_new (GDK_CONFIGURE);
point.x = point.y = 0;
ClientToScreen (msg->hwnd, &point);
event->configure.window = window; event->configure.window = window;
event->configure.width = client_rect.right - client_rect.left; event->configure.width = client_rect.right - client_rect.left;
@ -2980,23 +2982,25 @@ gdk_event_translate (GdkDisplay *display,
!GDK_WINDOW_DESTROYED (window)) !GDK_WINDOW_DESTROYED (window))
{ {
RECT client_rect; RECT client_rect;
POINT point;
GetClientRect (msg->hwnd, &client_rect); GetClientRect (msg->hwnd, &client_rect);
point.x = client_rect.left; /* always 0 */
point.y = client_rect.top;
/* top level windows need screen coords */
if (GDK_WINDOW_TYPE (window) == GDK_WINDOW_TOPLEVEL)
ClientToScreen (msg->hwnd, &point);
GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->width = client_rect.right - client_rect.left; GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->width = client_rect.right - client_rect.left;
GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->height = client_rect.bottom - client_rect.top; GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->height = client_rect.bottom - client_rect.top;
((GdkWindowObject *) window)->x = client_rect.left; ((GdkWindowObject *) window)->x = point.x;
((GdkWindowObject *) window)->y = client_rect.top; ((GdkWindowObject *) window)->y = point.y;
if (((GdkWindowObject *) window)->event_mask & GDK_STRUCTURE_MASK) if (((GdkWindowObject *) window)->event_mask & GDK_STRUCTURE_MASK)
{ {
POINT point;
GdkEvent *event = gdk_event_new (GDK_CONFIGURE); GdkEvent *event = gdk_event_new (GDK_CONFIGURE);
point.x = point.y = 0;
ClientToScreen (msg->hwnd, &point);
event->configure.window = window; event->configure.window = window;
event->configure.width = client_rect.right - client_rect.left; event->configure.width = client_rect.right - client_rect.left;

View File

@ -40,7 +40,7 @@
#define mkdir(p,m) _mkdir(p) #define mkdir(p,m) _mkdir(p)
#include <gdk/win32/gdkwin32.h> /* gdk_win32_hdc_get */ #include <gdk/win32/gdkwin32.h> /* gdk_win32_hdc_get */
#else #else
#error "The implementation is win32 only yet." #error "The implementation is win32 only."
#endif /* G_OS_WIN32 */ #endif /* G_OS_WIN32 */
typedef struct _GtkFileSystemWin32Class GtkFileSystemWin32Class; typedef struct _GtkFileSystemWin32Class GtkFileSystemWin32Class;
@ -305,10 +305,10 @@ gtk_file_system_win32_list_volumes (GtkFileSystem *file_system)
if (p[0] == 'a' || p[0] == 'b') if (p[0] == 'a' || p[0] == 'b')
vol->is_mounted = FALSE; /* skip floppy */ vol->is_mounted = FALSE; /* skip floppy */
else else
vol->is_mounted = TRUE; vol->is_mounted = TRUE; /* handle other removable drives special, too? */
/*FIXME: gtk_file_path_compare() is case sensitive, we are not*/ /*FIXME: gtk_file_path_compare() is case sensitive, we are not*/
p[0] = toupper (p[0]); p[0] = g_ascii_toupper (p[0]);
vol->drive = g_strdup (p); vol->drive = g_strdup (p);
list = g_slist_append (list, vol); list = g_slist_append (list, vol);
@ -328,9 +328,9 @@ gtk_file_system_win32_get_volume_for_path (GtkFileSystem *file_system,
g_return_val_if_fail (p != NULL, NULL); g_return_val_if_fail (p != NULL, NULL);
/*FIXME: gtk_file_path_compare() is case sensitive, we are not*/ /*FIXME: gtk_file_path_compare() is case sensitive, we are not*/
p[0] = toupper (p[0]); p[0] = g_ascii_toupper (p[0]);
vol->drive = p; vol->drive = p;
vol->is_mounted = (p[0] != 'a' && p[0] != 'b'); vol->is_mounted = (p[0] != 'A' && p[0] != 'B');
return vol; return vol;
} }
@ -423,15 +423,35 @@ gtk_file_system_win32_volume_get_display_name (GtkFileSystem *file_system,
GtkFileSystemVolume *volume) GtkFileSystemVolume *volume)
{ {
gchar display_name[80]; gchar display_name[80];
gunichar2 *wdrive = g_utf8_to_utf16 (volume->drive, -1, NULL, NULL, NULL);
gunichar2 wname[80];
if (GetVolumeInformation (volume->drive, g_return_val_if_fail (wdrive != NULL, NULL);
if (GetVolumeInformationW (wdrive, wname, sizeof(wname),
NULL, NULL, NULL, NULL, 0))
{
gchar *name = g_utf16_to_utf8 (wname, -1, NULL, NULL, NULL);
gchar *real_display_name = g_strconcat (name, " (", volume->drive, ")", NULL);
g_free (name);
g_free (wdrive);
GTK_NOTE (MISC, g_print ("Wide volume display name: %s\n", real_display_name));
return real_display_name;
}
else if (GetVolumeInformation (volume->drive,
display_name, sizeof(display_name), display_name, sizeof(display_name),
NULL, /* serial number */ NULL, /* serial number */
NULL, /* max. component length */ NULL, /* max. component length */
NULL, /* fs flags */ NULL, /* fs flags */
NULL, 0)) /* fs type like FAT, NTFS */ NULL, 0)) /* fs type like FAT, NTFS */
{ {
gchar* real_display_name = g_strconcat (display_name, " (", volume->drive, ")", NULL); gchar *name = g_locale_to_utf8 (display_name, -1, NULL, NULL, NULL);
gchar *real_display_name = g_strconcat (name, " (", volume->drive, ")", NULL);
g_free (name);
GTK_NOTE (MISC, g_print ("Locale volume display name: %s\n", real_display_name));
return real_display_name; return real_display_name;
} }
@ -1095,6 +1115,16 @@ gtk_file_folder_win32_get_info (GtkFileFolder *folder,
gchar *dirname; gchar *dirname;
gchar *filename; gchar *filename;
if (!path)
{
g_return_val_if_fail (filename_is_root (folder_win32->filename), NULL);
/* ??? */
info = filename_get_info (folder_win32->filename, folder_win32->types, error);
return info;
}
filename = filename_from_path (path); filename = filename_from_path (path);
g_return_val_if_fail (filename != NULL, NULL); g_return_val_if_fail (filename != NULL, NULL);
@ -1291,6 +1321,6 @@ filename_is_root (const char *filename)
/* accept both forms */ /* accept both forms */
return ( (len == 2 && filename[1] == ':') return ( (len == 2 && filename[1] == ':')
|| (len == 3 && filename[1] == ':' && filename[2] == '\\')); || (len == 3 && filename[1] == ':' && (filename[2] == '\\' || filename[2] == '/')));
} }