Commit Graph

3554 Commits

Author SHA1 Message Date
Jehan
03c53357f6 win32: provide an implementation for gdk_test_simulate_key().
https://bugzilla.gnome.org/show_bug.cgi?id=734879
2014-09-22 21:23:31 -04:00
Emmanuele Bassi
fbf38d16bc threads: Do not release the GDK lock if it hasn't been acquired yet
Since GLib ≥ 2.41, attempting to release an unlocked mutex will abort(),
as it happens on most systems already.

Given the lack of proper documentation on how to use GDK with threads,
there is code in the wild that does:

    gdk_threads_init ();
    gdk_init ();

    ...

    gtk_main ();

instead of the idiomatically correct:

    gdk_threads_init ();
    gdk_threads_enter ();

    gtk_init ();

    ...

    gtk_main ();

    ...

    gdk_threads_leave ();

Which means that gtk_main() will try to release the GDK lock, and thus
trigger an error from GLib.

we cannot really fix all the wrong code everywhere, and since it does
not cost us anything, we can work around the issue inside GDK itself, by
trying to acquire the GDK lock inside gdk_threads_leave() with
trylock().

https://bugzilla.gnome.org/show_bug.cgi?id=735428
2014-08-26 20:08:54 -04:00
Chun-wei Fan
7eb1c7701c gdkselection-win32.c: Declare Variables At Top Of Block
...so that builds on Visual C++ can be fixed.
2014-05-16 12:07:01 +08:00
Marc-André Lureau
fd44b53a39 gdk/win32: VK_SNAPSHOT maps to GDK_Print
Also, I am not sure the above VK_PRINT -> GDK_Print mapping is
correct, but it doesn't hurt yet.

https://bugzilla.gnome.org/show_bug.cgi?id=686170
2014-04-24 16:29:10 +02:00
Marc-André Lureau
ed081e30b6 win32: do not crash on invalid utf8 conversion
g_utf8_to_utf16() is not guaranteed to succeed. Check the error
and return if it failed.

https://bugzilla.gnome.org/show_bug.cgi?id=696232
2014-04-24 16:18:09 +02:00
Marc-André Lureau
10430feb8d gdk/win32: remove extra allocation for \r removal
Although I can't find explicit documentation for clipboard pointer, it
seems to be possible to modify clibpoard memory without side-effects.

According to MSDN,
http://msdn.microsoft.com/en-us/library/windows/desktop/aa366596%28v=vs.85%29.aspx

"The global and local functions are supported for porting from 16-bit
code, or for maintaining source code compatibility with 16-bit
Windows. Starting with 32-bit Windows, the global and local functions
are implemented as wrapper functions that call the corresponding heap
functions using a handle to the process's default heap."

"Memory objects allocated by GlobalAlloc and LocalAlloc are in private,
committed pages with read/write access that cannot be accessed by other
processes. Memory allocated by using GlobalAlloc with GMEM_DDESHARE is
not actually shared globally as it is in 16-bit Windows. This value has
no effect and is available only for compatibility. "

https://bugzilla.gnome.org/show_bug.cgi?id=711553
2014-04-24 16:16:19 +02:00
Marc-André Lureau
dd37429b51 win32: add more clipboard data checks to avoid crash
It may happen that the received clipboard data is empty, but
if it's of type image/bmp, gtk+ will crash:

gdk_property_change: 00030AD4 GDK_SELECTION image/bmp REPLACE 8*0 bits:
... delayed rendering
gdk_selection_send_notify_for_display: 00030AD4 CLIPBOARD image/bmp
GDK_SELECTION (no-op)
_gdk_win32_selection_convert_to_dib: 1252003C image/bmp

Program received signal SIGSEGV, Segmentation fault.
0x749a9f40 in msvcrt!memmove () from C:\Windows\syswow64\msvcrt.dll

Thread 1 (Thread 2248.0x1b34):
target=0xc07b) at gdkselection-win32.c:1292
at gdkevents-win32.c:3498
wparam=8, lparam=0) at gdkevents-win32.c:232
message=773, wparam=8, lparam=0)
    at gdkevents-win32.c:263
C:\Windows\syswow64\user32.dll
C:\Users\rugoosse\AppData\Local\virt-viewer\bin\libpangocairo-1.0-0.dll
wparam=0, lparam=-1687549457)
    at gdkevents-win32.c:248
C:\Users\rugoosse\AppData\Local\virt-viewer\bin\libpangocairo-1.0-0.dll

https://bugzilla.gnome.org/show_bug.cgi?id=728745
2014-04-24 16:07:58 +02:00
Marc-André Lureau
95985a2181 win32: free allocated gdi objects in 16bpp
In 16bpp, Gdk is creating hbitmap with CreateDIBSection() and a hdc with
CreateCompatibleDC(). Those 2 objects need to be released when the
pixmap is finalized.

https://bugzilla.gnome.org/show_bug.cgi?id=671538

Signed-off-by: Hans Breuer <hans@breuer.org>
2014-03-16 13:46:32 +01:00
Pavel
7ff6e601c3 exstyle changed after the window size adjustment
Originaly the size of the window based on the client area size has
been calculated first and then variables dwStyle and dwExStyle have
been changed. Thus the window size has been calculated for different
windows type then eventually used when calling CreateWindowEx. This
caused for example the Gimp tool windows to have different size than
formerly saved in session. The whole code calculating the window size
is moved after the last adjustment of dwExStyle variable in this patch.

Signed-off-by: Hans Breuer <hans@breuer.org>
2014-03-16 13:46:30 +01:00
Hans Breuer
6d329406ae Bug 665507 - Pixmap via cairo DIB breaks gdk_gc_set_stipple() use
Only one bitmap can be selected into a device context. Using the
DIB created by cairo consumes the one opportunity, so every further
SelectObject into the same DC in GDK code will fail.
2014-03-16 13:46:29 +01:00
Hans Breuer
479bc6e550 win32: restore effect of _gdk_selection_property_delete
Can not find in the changelog entry why it was disabled at all,
see: http://git.gnome.org/browse/gtk+/commit/?id=3f4c73

The ill effect is somewhat hidden: if you try to copy images
via clipboard only the first one is pastable, i.e. Gdk keeps
the reference to the first image and provides it for later
paste.
2014-03-16 13:46:27 +01:00
John Ralls
c5561f7e8c Bug 711298 - "Edit Scheduled Transaction" window way too modal
Put dialogs and utility windows in the same level as normal and
toolbar windows so that Gtk can control their stacking instead of
forcing them, rather unnaturally, to be on top of all other windows,
even other application windows, even when another application has
focus.
2014-01-24 14:00:26 -08:00
Marek Kasik
090159cec9 gdkwindow: Don't add the same window to "update_windows" twice
This prevents passing of such window to another GMainLoop.

https://bugzilla.gnome.org/show_bug.cgi?id=711552
2013-12-18 18:29:33 +01:00
Marek Kasik
c212cb8f32 gdkwindow: Handle references in "update_windows" list correctly
Since update_windows list is a static variable in GdkWindow.c which
contains pointers to windows which needs to be updated, it can happen
that it contains a pointer to a window even after quit from a gtk_main().
If another gtk_main() is called in the same process it tries to process
windows in the list which leads to a crash.
Correct reference count handling of added windows prevents such applications
from crash.

https://bugzilla.gnome.org/show_bug.cgi?id=711552
2013-12-16 18:15:50 +01:00
Cody Russell
280fc402be Win32: Honor the geometry when GDK_HINT_MAX_SIZE is set.
The MINMAXINFO struct was being populated based upon geometry hints when
GDK_HINT_MAX_SIZE flag was enabled, then promptly having its values blown
away with default values.

https://bugzilla.gnome.org/show_bug.cgi?id=711110
2013-10-31 15:58:41 -05:00
Behdad Esfahbod
2eade26e68 [gdkcairo] Fix color premultiplication
https://bugzilla.gnome.org/show_bug.cgi?id=513812
2013-09-09 12:08:26 -04:00
Ek Kato
a2149a671a Bug 705750 Quartz input method doesn't work correctly for Chinese characters 2013-08-16 10:25:25 -07:00
Aleksander Morgado
cc2d29771d win32: avoid assertion when creating a GdkPixmap fails
If gdk_pixmap_new() fails (e.g. CreateDIBSection() failure) we end up
g_object_unref()-ing the temporary GdkPixmap, and we do this before having set
the drawable_impl->hdc and drawable_impl->hdc_count. Now, this could have just
been a couple of warnings being dumped, but instead it really crashes the
application because in win32-specific GdkDrawable's finalize() we assert if
drawable_impl->hdc_count is not zero:

Gdk:ERROR:gdkdrawable-win32.c:2047:_gdk_win32_drawable_finish: assertion failed: (impl->hdc_count == 0)

In order to avoid this crash, we make sure we don't decrement the hdc_count in
the GdkPixmap's finalize() unless we have it set first (i.e. we avoid hdc_count
going down to -1).

https://bugzilla.gnome.org/show_bug.cgi?id=699236
2013-08-14 10:31:36 +02:00
Ek Kato
8fa5cf0554 Bug 705181 Annoying beep on arrow keys
Original patch was a bit excessive, just needed to not forward the command.
2013-08-13 11:14:29 -07:00
John Ralls
49fd2b2b46 Bug 701571 NSApp doesn't notice NSWindow destruction
Part 1 of the fix; part 2 awaits Glib developer approval (see
https://bugzilla.gnome.org/show_bug.cgi?id=704374) and is more
correctly associated with
https://bugzilla.gnome.org/show_bug.cgi?id=674108
2013-08-11 11:02:14 -07:00
Daniel Sabo
80aabf4f1c Reset cursor when mouse leaves a toplevel window.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=692548
2013-08-08 09:36:28 -05:00
Michael Hutchinson
91bcca6f39 Bug 705181: Fix annoying beeping introduced by Mac IME
NSTextInputClient should not chain unhandled commands to super
2013-07-30 17:17:29 -07:00
Aleksander Morgado
4ecbef0791 win32: always recreate the cairo surface if requested to do so
When _gdk_windowing_create_cairo_surface() gets called, we should always create
a fully new cairo surface, instead of just referencing the available one, which
may already be finished (i.e. in CAIRO_STATUS_SURFACE_FINISHED state).

A new user_data key is added to the surface to explicitly release the acquired
DC when the surface is destroyed, independent to the user_data key added to
clear the impl->user_data pointer.

https://bugzilla.gnome.org/show_bug.cgi?id=695636
2013-07-30 00:10:53 -04:00
Matthias Clasen
280cf4ca94 X11: Fix the cut-off for too large windows
We can only handle 2^15-1 pixels, not 2^16-1.
Pointed out by Morten Welinder.

http://bugzilla.gnome.org/show_bug.cgi?id=698758
2013-07-29 20:57:00 -04:00
Ek Kato
43ed68aa33 Bug 701332 - Patch for minor glitch in NSTextInput 2013-07-27 13:55:39 -07:00
Michael Natterer
bbcde7e380 quartz: fix crashes that sometimes happened on the first key press
because nobody has called gdk_keymap_get_for_display() before.
Now we simply make sure the default display's keymap exists
if somebody calls any gdk_keymap_*() function with a NULL
keymap (which is an allowed value).
2013-07-25 16:44:21 +02:00
Hib Eris
c8d52c018b Define INITGUID only for mingw.org compiler
Defining INITGUID causes a build failure with mingw-w64 > r5589.

https://bugzilla.gnome.org/show_bug.cgi?id=699673

(cherry picked from commit 6a71820ff3)
2013-07-13 16:13:08 +02:00
Michael Natterer
e62709da2e quartz: remove check for keymap changes from update_keymap()
The function is now only called when the keymap has actually
changed. bug #698183.
2013-06-20 17:22:43 +02:00
Michael Natterer
c2919a6e91 quartz: update the keymap only if the input method changed
and not on each keystroke, which for some IMs apparently caused a full
update on each keystroke, not just a check for changes. Patch from
Takuro Ashie, bug #698183.
2013-06-20 16:59:03 +02:00
Aleksander Morgado
99e3d072d6 win32: don't convert '\n' to '\r\n' when copying if it already is '\r\n'
https://bugzilla.gnome.org/show_bug.cgi?id=649390
2013-06-18 09:24:06 +02:00
Michael Natterer
59d49e1566 quartz: move dialogs to the same window level as utility windows
window_type_hint_to_level(): applied patch from Paul Davis which moves
dialogs to NSFloatingWindowLevel. This is not quite the perfect
solution, but it's a pragmatic fix that makes apps which have both
window types much more usable, and prevents dialog from disappearing
under an application's main window.
2013-06-06 15:39:53 +02:00
Michael Natterer
9754c51349 quartz: honor more source image properties in _gdk_quartz_image_copy_to_image()
Particularly look at the source image's byte order when making a
screenshot of the "root window" (which is the window stack). Make
the code more generic so it can handle all sorts of pixel formats.
2013-05-28 16:03:13 +02:00
Jehan
8368de2bc3 Bug 575767: fix crashes when XInput device disappears.
Ignore X11 errors from querying state of unplugged input devices.
GTK+ 3 handle this better with hotplugging support in XInput 2, but
this is working workaround for avoiding ugly crashes and data loss
with GTK+ 2.
2013-05-23 05:50:01 +09:00
E K Kato
21c775a2c8 Bug 694273 - Support for NSTextInputClient in text widgets 2013-05-20 10:03:17 -07:00
Aleksander Morgado
0df60513cb win32: ensure proper error is reported when CreateDIBSection() fails
GetLastError() should be called immediately after the failure, so call
WIN32_GDI_FAILED() just after the CreateDIBSection() error, not after
ReleaseDC().

https://bugzilla.gnome.org/show_bug.cgi?id=698563
2013-04-29 14:27:33 +02:00
Alexander Larsson
692a0e5906 gdkwindow: Handle updates created by outstanding moves in same update
If gdk_window_flush_outstanding_moves() creates new update area
we handle this directly in the same draw to avoid flashing.

This mainly affects win32 as X11 does its exposes from moves async.
However, its important for win32 since ScrollDC seems to sometimes
invalidate (and not copy) unexected regions.

http://bugzilla.gnome.org/show_bug.cgi?674051
2013-04-10 14:32:15 +02:00
Alexander Larsson
ea66a8a580 win32: Report ScrollDC update region directly
Rather than set the window update region and repaint this region
when we get a WM_PAINT we just directly add it to the update
region. No need to roundtrip via win32.

This lets us also make sure we do this drawing in the same update
cycle. This seems especially important on Win7, because ScrollDC
seems to act kind of weird there, not using bitblt in areas where
it seemingly could, which makes scrolling look really flashy.

http://bugzilla.gnome.org/show_bug-cgi?id=674051
2013-04-10 14:25:26 +02:00
Alexander Larsson
4f27256306 Make gdk_flush_outstanding_moves "reentrant"
If the do_move_region_bits_on_impl causes updates they will
only be affected by the moves we haven't done yet.
We do this by making sure the outstanding_moves list is uptodate
on ever iteration of the loop.
2013-04-10 14:04:26 +02:00
Alexander Larsson
f1921f8c2f win32: Fix build
gdkwindown-win32.c included windows.h directly rather than via gdkwin32.h
which broke the build for me at least. Instead rely on it being included in
gdkwin32.h and things work right.
2013-04-10 09:37:59 +02:00
Michael Natterer
0909d7cee6 Revert "gdk: merge all 3.x changes to gdk_keysym_to_unicode_tab[] in gdkkeyuni.c"
This reverts commit 67438e0e49.

There must be some other change in 3.x that goes along with these
table changes, they completely break e.g. GtkEntry.
2013-03-30 08:42:58 +01:00
Michael Natterer
67438e0e49 gdk: merge all 3.x changes to gdk_keysym_to_unicode_tab[] in gdkkeyuni.c 2013-03-28 14:33:59 +01:00
Kristian Rietveld
a269c2f8d2 quartz: move atom/pasteboard type conversions functions to GDK 2013-03-28 13:00:33 +01:00
Kristian Rietveld
e6cf7a8d81 quartz: define GDK_NATIVE_WINDOW_POINTER 2013-03-28 12:06:41 +01:00
Alan McGovern
776fc82bd5 quartz: Null check title before setting it
This avoids a crash in objective-c.

https://bugzilla.gnome.org/show_bug.cgi?id=695278
2013-03-06 12:40:23 +01:00
Aleksander Morgado
461c3835aa win32: fix possible memleak if GlobalAlloc() fails
Also remove the unused 'buf' variable.

https://bugzilla.gnome.org/show_bug.cgi?id=694742
2013-02-26 15:14:35 +01:00
Kristian Rietveld
184407309f quartz: retain content view when switching over toplevel. 2012-12-28 22:12:18 +01:00
Kristian Rietveld
30deba453a quartz: Make sure the old toplevel is closed on recreation 2012-12-28 22:12:18 +01:00
Kristian Rietveld
a8008b796f quartz: make sure all old properties are set on the new toplevel
Apply patch by Paul Davies; part of bug 669808.
2012-12-28 22:12:18 +01:00
Kristian Rietveld
62f1d871b7 quartz: ensure window being (un)fullscreened is visible
Patch by Paul Davis; part of bug 669808.
2012-12-28 22:12:18 +01:00
Matthias Clasen
1f0f399469 Move single-include guards inside include guards
gcc has optimizations for include guards that only work
if they are outermost in the the header.
https://bugzilla.gnome.org/show_bug.cgi?id=689810
2012-12-28 11:26:46 -05:00