Compare commits

..

25 Commits

Author SHA1 Message Date
Matthias Clasen
39c8db124d Don't show cursor handles without a cursor
A non-editable textview may or may not have a cursor.
Take that into account when showing handles.
2012-09-02 19:56:28 -04:00
Carlos Garnacho
1c11f6ed1a entry: switch handles correctly on rtl
MIN/MAX of pixel values don't cut it, so compare
selection/cursor indexes.
2012-09-02 23:38:14 +02:00
Matthias Clasen
291ff93a6b Fix calculation of selection_bound location
_gtk_entry_get_selection_bound_location was not converting
priv->selection_bound to an index before feeding it to pango.
This was showing up as wrong handle positions when dragging
selections in password entries.
2012-09-02 17:15:18 -04:00
Matthias Clasen
ccc4f0f133 Ignore select_words when updating handle positions
This fixes problems where the handles can appear stuck when
double-click selecting and then dragging the handles.
2012-09-02 16:05:28 -04:00
Matthias Clasen
eecd228493 Minor fix for handle updates
Use a position that matches the mode, when updating handles.
2012-09-02 15:55:46 -04:00
Matthias Clasen
f69179b562 Remove an unused variable 2012-09-02 11:25:42 -04:00
Matthias Clasen
b79946956b Correct some editability/sensitivity checks
I was getting touch handles when double-clicking with a mouse.
And I was not getting touch handles when clicking around in a
textview that is sensitive, but not editable.

Correct these checks: A editable text view can have a cursor
and selections, and when in touchscreen mode, we need to show
handles for them.
2012-09-02 11:25:32 -04:00
Carlos Garnacho
1b5615df75 entry: If a recompute is pending, wait before updating handles
This avoids redundant window visibility and position changes
2012-08-29 16:04:54 +02:00
Carlos Garnacho
adce361ec5 textview: Unset handles when the buffer changes below these
On the situations where a different buffer is set, or the current
one is clobbered, the handles are unset. More effort could be indeed
done on setting those after the view has revalidated the contents
and the markers have valid coordinates again, although it's a bit of
a corner case.

Fixes the "hypertext" textview demo leaving handles at odd positions
after the buffer changed.
2012-08-27 17:18:21 +02:00
Carlos Garnacho
209e39ab8a textview: revert the code preventing initial backwards selection
With the handles being invariably set to the min/max selection positions,
it's no longer necessary to keep this invariant when starting a selection.

Note that dragging from the text handles themselves will still disallow
both handles from crossing.
2012-08-27 14:50:42 +02:00
Carlos Garnacho
3158630a68 entry: revert the code preventing initial backwards selection
With the handles being invariably set to the min/max selection positions,
it's no longer necessary to keep this invariant when starting a selection.

Note that dragging from the text handles themselves will still disallow
both handles from crossing.
2012-08-27 14:47:06 +02:00
Carlos Garnacho
2b02d97a93 textview: Update to new GtkTextHandlePosition values 2012-08-27 14:38:15 +02:00
Carlos Garnacho
f194d499c3 entry: update to new GtkTextHandlePosition values 2012-08-27 14:37:17 +02:00
Carlos Garnacho
3fd45e0267 GtkTextHandle: change selection semantics to start/end
Given text widgets don't behave consitently wrt cursor/selection
bound, nor are really expected to do so, change GtkTextHandle
positions to represent selection start/end. Text widgets are
expected to match buffer iters/positions with handle positions.
2012-08-27 14:29:53 +02:00
Carlos Garnacho
2a537b5b8b textview: Optionally update handles on focus in
This is so toplevels being moved/resized don't leave a selection
with no possibility of being further manipulated
2012-08-24 19:13:31 +02:00
Carlos Garnacho
89e420b390 entry: Optionally update handles on focus in
This is so toplevels being moved/resized don't leave a selection
with no possibility of being further manipulated
2012-08-24 19:12:27 +02:00
Carlos Garnacho
426e8c8c97 entry: Don't unset handles' mode on text DnD 2012-08-24 18:30:51 +02:00
Carlos Garnacho
78a8782b13 text: Set up envvar to test touch features
The GTK_TEST_TOUCHSCREEN_FEATURES envvar is now checked in entries
and textviews to allow testing of text handles with other kinds of
devices.
2012-08-24 17:02:53 +02:00
Carlos Garnacho
da8de20928 entry: Fix warnings on backwards touch selection from the last position
It shouldn't allow backwards selection, but still shouldn't go off bounds
trying to keep a minimum selection.
2012-08-24 17:02:52 +02:00
Carlos Garnacho
2eaabf5ad3 textview: Don't apply selection clamping on handle cursor mode 2012-08-24 17:02:52 +02:00
Carlos Garnacho
e299dfa462 entry: Don't apply selection clamping on handle cursor mode 2012-08-24 17:02:51 +02:00
Carlos Garnacho
edd21e61f2 scrolledwindow: don't capture events meant for non-child windows
GtkTextHandle creates temporary override redirect windows, but still
hook to the text widget for events, so those are effectively captured
by GtkScrolledWindow if a text widget is within it
2012-08-24 17:02:51 +02:00
Carlos Garnacho
80a89c5245 Implement touch text selection in GtkTextView
GtkTextHandle is used to indicate both the cursor position
and the selection bound, dragging the handles will modify
the selection and scroll if necessary.

Backwards text selection is also blocked for touch devices,
so the handles don't get inverted positions and possibly
obscure portions of the selected text.
2012-08-24 17:02:51 +02:00
Carlos Garnacho
739b6e1862 Implement touch text selection in GtkEntry
GtkTextHandle is used to indicate both the cursor position
and the selection bound, dragging the handles will modify
the selection and scroll if necessary.

Backwards text selection is also blocked for touch devices,
so the handles don't get inverted positions (This is more
important though on GtkTextView, as inverted handles may
obscure portions of the selected text, good for consistence
though)
2012-08-24 17:02:50 +02:00
Carlos Garnacho
03a7331c5c Add GtkTextHandle
This is a helper object to allow text widgets to implement
text selection on touch devices. It allows for both cursor
placement and text selection, displaying draggable handles
on/around the cursor and selection bound positions.
2012-08-24 17:02:50 +02:00
617 changed files with 81448 additions and 250538 deletions

View File

@@ -18,12 +18,12 @@ GTK+ requires the following packages:
Simple install procedure
========================
% tar xf gtk+-@GTK_VERSION@.tar.xz # unpack the sources
% cd gtk+-@GTK_VERSION@ # change to the toplevel directory
% ./configure # run the `configure' script
% make # build GTK+
% gzip -cd gtk+-@GTK_VERSION@.tar.gz | tar xvf - # unpack the sources
% cd gtk+-@GTK_VERSION@ # change to the toplevel directory
% ./configure # run the `configure' script
% make # build GTK+
[ Become root if necessary ]
% make install # install GTK+
% make install # install GTK+
The Details
===========

275
NEWS
View File

@@ -1,278 +1,3 @@
Overview of Changes in GTK+ 3.7.2
=================================
* Theming:
- Improve touch text handle theming
- Always draw background of menuitems
* Geometry management
- Size groups now handle height-for-width
- Fix corner cases in label size allocation
* Accessibility
- Make entry icons accessible
* Filechooser
- Don't add duplicate bookmarks
- Remember sidebar width
* Wayland: Build against wayland-client 1.0
* Bugs fixed:
524295 remember the file chooser side pane's position
577806 gtk_file_chooser_add_shortcut_folder adds duplicates...
677609 GtkSizeGroup regression in GTK+ 3.3.20
683896 Clean up global resources when the display is closed
686021 spinner animation should not be subject to enable-an...
686347 Clickable icons are not accessible as children of te...
687059 icon-theme: support loading symbolic GFileIcons from...
687196 filesystemmodel: invalidate nodes on file remove
687467 Commit "Implement proper cross-fades for gradients" ...
687842 Support partially transparent widgets
687872 Segfault when attempting to get character extents fo...
687977 icon-theme: Add some preconditions for NULL arguments
* Translation updates:
Assamese
Brazilian Portuguese
Estonian
Galician
German
Greek
Gujarati
Indonesian
Latvian
Lithuanian
Marathi
Norwegian bokmål
Serbian
Slovenian
Spanish
Traditional Chinese
Overview of Changes in GTK+ 3.7.0
=================================
* Add an "inverted" property to GtkLevelBar
* Support RTL flipping in GtkLevelBar
* Various memory leak fixes
* Wayland: Update for protocol changes
* Bugs fixed:
684288 level-bar: add an "inverted" property like GtkProgr...
684415 Fix drag-motion event handling
684980 Improve the appearance of the dragged header
686013 CSS: crash drawing a GtkEntry in gedit
686152 Calls gdk_window_get_frame_extents with a potential...
686209 memleak with "text-shadow" css
686265 scrolledwindow: set GDK_EXPOSURE_MASK on the oversh...
686280 GtkScrollbar and GtkScale rendering broken in gtk 3.6
686366 Use named union for _GtkSymbolicColor in gtk/gtksym...
* Translation updates:
Czech
Estonian
Galician
Indonesian
Lithuanian
Serbian
Slovak
Slovenian
Spanish
Overview of Changes in GTK+ 3.6.1
=================================
* CSS:
- huge refactoring to avoid computing wrong values
- treeview: Invalidate children properly
- treeview: Fix computing child paths
* Broadway:
- use binary websockets when available
* Bugs fixed:
646221 Imperfect Russian translation of 'Print preview'...
682395 Nautilus tabs have black background
684517 window: Delay showing auto mnemonics on focus in
684639 GTK+ 3.5.18 makes Epiphany unusable
684984 No focus rendering for Icon Views in SELECTION_N...
685449 Non-uniform borders on GtkScrolledWindow break c...
685996 trivial build fix: test uses = not ==
Fix a multi-display problem in touch handle code
App chooser: respect NoDisplay
* Translation updates:
Catalan
Catalan (Valencian)
Italian
Japanese
Khmer
Norwegian bokmål
Russian
Slovak
Overview of Changes in GTK+ 3.6.0
=================================
* Add support for blur to CSS shadows
* Bugs fixed:
679883 When printing Custom paper sizes GTK Print Dialog...
684258 Crash when calling gtk_application_set_menubar twice
684606 GtkMenuButton: implement rtl flipping
684607 GtkSearchEntry: flip the clear icon in rtl
Fix style context path for internal buttons
* Translation updates:
Bengali
Brazilian Portuguese
Bulgarian
Catalan
Catalan (Valencian)
Czech
Galician
German
Gujarati
Hebrew
Hindi
Kannada
Kyrgyz
Latvian
Malayalam
Punjabi
Russian
Serbian
Telugu
Overview of Changes in GTK+ 3.5.18
==================================
* GMenu:
- Support namespaces for actions
- Allow submenus to have actions for opening
- New function: gtk_menu_shell_bind_model
* CSS:
- Parse and support CSS animations
- Support cross-fading and transitions
* OS X:
- Adjust scrollbar and scale behavior according to platform
* Bugs fixed
643611 Leak on gail_widget_get_description
658694 GtkAssistant: Unable to change current page in prepare...
670390 -GtkMenuBar-shadow-type: none disables background inst...
671786 Glade XML files cannot set an ImageMenuItem accelerato...
674108 Hard crash due to wrong NSAutoreleasePool stacking
676890 GtkButton are still highlighted after removing them fr...
677559 argument of Gdk.Keymap.map_virtual_modifiers is not co...
680962 GtkMenuButton doesn't display accelerators when used w...
682630 GMenuModel attribute for an action to toggle on submen...
682831 gtkmodelmenu: expose API for action namespace
683474 Print dialog lists custom paper sizes twice for "Print...
683627 Memory leak in style_data_lookup
683718 box: Fix typo
683738 Simplify GtkApplicationWindow accel handling
683874 Load settings.ini also from XDG_CONFIG_DIRS
683896 Clean up global resources when the display is closed
684038 togglebutton: always set PRELIGHT state when in_button...
684076 clean up a11y on shutdown
684096 GtkWidget:drag-data-received code sample refers to rem...
684156 fontchooserwidget: scroll to the currently selected row
* Translation updates
Arabic
Assamese
Belarusian
Brazilian Portuguese
British English
Danish
Finnish
French
Galician
Greek
Hebrew
Hungarian
Indonesian
Korean
Lithuanian
Persian
Polish
Portuguese
Punjabi
Serbian
Slovenian
Thai
Spanish
Russian
Traditional Chinese
Overview of Changes in GTK+ 3.5.16
==================================
* Fix critical warnings on startup in nautilus
Overview of Changes in GTK+ 3.5.14
==================================
* Input method support
- Propagate input purpose and hints to individual IMs
- Add a hint to suppress on-screen keyboards
* GtkEntry can now set Pango attributes for its text
* GtkEntry and GtkTextView show 'selection handles' when
used with touch devices
* GtkSpinButton can be oriented vertically
* Bugs fixed
645065 GtkFileChooserButton doesn't handle closing its dialo...
661973 gtk+ reacts on F10 press incorrectly with xkeyboard-c...
672046 Issues with widget state propagation
672431 the alt+tab app switch makes mnemonics flash
676787 Update printing demo to use new print setting
679144 Gdk doesn't properly find the child area with alpha
681617 radio button text isn't centered when draw indicator ...
682129 Print Dialog / Improving "Print to file" option
682291 GtkMenuButton .ui issues
682552 Improve the layout of the mount operations dialog
682662 GtkAspectFrame: vertical alignment should be top/bott...
682724 Fix a typo in the the comments
682825 Also compile gtkdbusgenerated.c on non-UNIX environme...
682919 Crash in GTK+-3.x (3.0.x-3.5.12+) on Windows with CJK...
683001 Make headings bold in message dialogs by default
683168 Make spinbutton orientable
* Translation updates
Assamese
French
Galician
Greek
Indonesian
Japanese
Kazakh
Latvian
Lithuanian
Norwegian bokmål
Persian
Polish
Punjabi
Spanish
Vietnamese
Overview of Changes in GTK+ 3.5.12
==================================

View File

@@ -75,17 +75,8 @@ Patches should be in unified diff form. (The -up option to GNU diff.)
Release notes for 3.6
=====================
* The accessibility bridge code that exports accessible objects
on the bus is now used by default; atk-bridge has been converted
into a library that GTK+ links against. To void the linking,
pass --without-atk-bridge when configuring GTK+.
* GDK threading support has been deprecated. It is recommended to
use g_idle_add(), g_main_context_invoke() and similar funtions
to make all GTK+ calls from the main thread.
* GTK+ now follows the XDG Base Directory specification for
user configuration and data files. In detail,
* Now follows the XDG Base Directory specification for user
configuration and data files. In detail,
* $XDG_CONFIG_HOME/gtk-3.0/custom-papers is the new location
for $HOME/.gtk-custom-papers
* $XDG_CONFIG_HOME/gtk-3.0/bookmarks is the new location

View File

@@ -5,7 +5,7 @@
<CopyDir>$(GlibEtcInstallRoot)</CopyDir>
<DefDir>$(SolutionDir)$(Configuration)\$(Platform)\obj\$(ProjectName)</DefDir>
<GtkApiVersion>3.0</GtkApiVersion>
<GtkBinaryVersion>3.0.0</GtkBinaryVersion>
<GtkBinaryVersion>2.10.0</GtkBinaryVersion>
<GtkDummyPrefix>\"/dummy\"</GtkDummyPrefix>
<GtkPrefixDefine>GTK_PREFIX="\"$(GtkDummyPrefix)\""</GtkPrefixDefine>
<GdkDefines>GDK_COMPILATION;G_LOG_DOMAIN="\"Gdk\""</GdkDefines>
@@ -18,24 +18,24 @@ mkdir $(CopyDir)\bin
copy $(Configuration)\$(Platform)\bin\*.dll $(CopyDir)\bin
copy $(Configuration)\$(Platform)\bin\*.exe $(CopyDir)\bin
mkdir $(CopyDir)\bin\gtk3-demo
mkdir $(CopyDir)\share\gtk-$(GtkApiVersion)\demo
copy $(Configuration)\$(Platform)\bin\*.exe $(CopyDir)\bin\gtk3-demo
copy ..\..\..\demos\gtk-demo\*.c $(CopyDir)\share\gtk-$(GtkApiVersion)\demo
copy ..\..\..\demos\gtk-demo\*.c $(CopyDir)\bin\gtk3-demo
copy ..\..\..\demos\gtk-demo\*.css $(CopyDir)\share\gtk-$(GtkApiVersion)\demo
copy ..\..\..\demos\gtk-demo\*.css $(CopyDir)\bin\gtk3-demo
copy ..\..\..\demos\gtk-demo\*.h $(CopyDir)\share\gtk-$(GtkApiVersion)\demo
copy ..\..\..\demos\gtk-demo\*.h $(CopyDir)\bin\gtk3-demo
copy ..\..\..\demos\gtk-demo\*.ui $(CopyDir)\share\gtk-$(GtkApiVersion)\demo
copy ..\..\..\demos\gtk-demo\*.ui $(CopyDir)\bin\gtk3-demo
copy ..\..\..\demos\gtk-demo\*.jpg $(CopyDir)\share\gtk-$(GtkApiVersion)\demo
copy ..\..\..\demos\gtk-demo\*.jpg $(CopyDir)\bin\gtk3-demo
copy ..\..\..\demos\gtk-demo\*.png $(CopyDir)\share\gtk-$(GtkApiVersion)\demo
copy ..\..\..\demos\gtk-demo\*.png $(CopyDir)\bin\gtk3-demo
copy ..\..\..\demos\gtk-demo\*.gif $(CopyDir)\share\gtk-$(GtkApiVersion)\demo
copy ..\..\..\demos\gtk-demo\*.gif $(CopyDir)\bin\gtk3-demo
mkdir $(CopyDir)\lib
@@ -319,8 +319,6 @@ copy ..\..\..\gtk\gtklabel.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
copy ..\..\..\gtk\gtklayout.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
copy ..\..\..\gtk\gtklevelbar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
copy ..\..\..\gtk\gtklinkbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
copy ..\..\..\gtk\gtkliststore.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
@@ -333,8 +331,6 @@ copy ..\..\..\gtk\gtkmenu.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
copy ..\..\..\gtk\gtkmenubar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
copy ..\..\..\gtk\gtkmenubutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
copy ..\..\..\gtk\gtkmenuitem.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
copy ..\..\..\gtk\gtkmenushell.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
@@ -415,8 +411,6 @@ copy ..\..\..\gtk\gtkscrollbar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
copy ..\..\..\gtk\gtkscrolledwindow.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
copy ..\..\..\gtk\gtksearchentry.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
copy ..\..\..\gtk\gtkselection.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
copy ..\..\..\gtk\gtkseparator.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

View File

@@ -176,8 +176,6 @@
<ClCompile Include="..\..\..\demos\gtk-demo\css_accordion.c" />
<ClCompile Include="..\..\..\demos\gtk-demo\css_basics.c" />
<ClCompile Include="..\..\..\demos\gtk-demo\css_multiplebgs.c" />
<ClCompile Include="..\..\..\demos\gtk-demo\css_pixbufs.c" />
<ClCompile Include="..\..\..\demos\gtk-demo\css_shadows.c" />
<ClCompile Include="..\..\..\demos\gtk-demo\demo_resources.c" />
<ClCompile Include="..\..\..\demos\gtk-demo\dialog.c" />
<ClCompile Include="..\..\..\demos\gtk-demo\drawingarea.c" />

View File

@@ -47,12 +47,6 @@
<ClCompile Include="..\..\..\demos\gtk-demo\css_multiplebgs.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\demos\gtk-demo\css_pixbufs.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\demos\gtk-demo\css_shadows.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\demos\gtk-demo\demo_resources.c">
<Filter>Source Files</Filter>
</ClCompile>

View File

@@ -41,7 +41,7 @@ copy ..\..\..\gdk\gdkconfig.h.win32 ..\..\..\gdk\gdkconfig.h&#x0D;&#x0A;
/>
<UserMacro
Name="GtkBinaryVersion"
Value="3.0.0"
Value="2.10.0"
/>
<UserMacro
Name="GtkDummyPrefix"
@@ -69,17 +69,16 @@ copy ..\..\..\gdk\gdkconfig.h.win32 ..\..\..\gdk\gdkconfig.h&#x0D;&#x0A;
echo on&#x0D;&#x0A;
mkdir $(CopyDir)\bin&#x0D;&#x0A;
copy $(ConfigurationName)\$(PlatformName)\bin\*.dll $(CopyDir)\bin&#x0D;&#x0A;
copy $(ConfigurationName)\$(PlatformName)\bin\*.exe $(CopyDir)\bin&#x0D;&#x0A;
mkdir $(CopyDir)\share\gtk-$(GtkApiVersion)\demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.c $(CopyDir)\share\gtk-$(GtkApiVersion)\demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.css $(CopyDir)\share\gtk-$(GtkApiVersion)\demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.h $(CopyDir)\share\gtk-$(GtkApiVersion)\demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.ui $(CopyDir)\share\gtk-$(GtkApiVersion)\demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.jpg $(CopyDir)\share\gtk-$(GtkApiVersion)\demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.png $(CopyDir)\share\gtk-$(GtkApiVersion)\demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.gif $(CopyDir)\share\gtk-$(GtkApiVersion)\demo&#x0D;&#x0A;
mkdir $(CopyDir)\bin\gtk3-demo&#x0D;&#x0A;
copy $(ConfigurationName)\$(PlatformName)\bin\*.exe $(CopyDir)\bin\gtk3-demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.c $(CopyDir)\bin\gtk3-demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.css $(CopyDir)\bin\gtk3-demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.h $(CopyDir)\bin\gtk3-demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.ui $(CopyDir)\bin\gtk3-demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.jpg $(CopyDir)\bin\gtk3-demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.png $(CopyDir)\bin\gtk3-demo&#x0D;&#x0A;
copy ..\..\..\demos\gtk-demo\*.gif $(CopyDir)\bin\gtk3-demo&#x0D;&#x0A;
mkdir $(CopyDir)\lib&#x0D;&#x0A;
copy $(ConfigurationName)\$(PlatformName)\bin\*-$(GtkApiVersion).lib $(CopyDir)\lib&#x0D;&#x0A;
@@ -223,14 +222,12 @@ copy ..\..\..\gtk\gtkinfobar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;
copy ..\..\..\gtk\gtkinvisible.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtklabel.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtklayout.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtklevelbar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtklinkbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkliststore.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtklockbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkmain.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkmenu.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkmenubar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkmenubutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkmenuitem.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkmenushell.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkmenutoolbutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
@@ -271,7 +268,6 @@ copy ..\..\..\gtk\gtkscalebutton.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#
copy ..\..\..\gtk\gtkscrollable.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkscrollbar.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkscrolledwindow.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtksearchentry.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkselection.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkseparator.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkseparatormenuitem.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;

View File

@@ -171,8 +171,6 @@
<File RelativePath="..\..\..\demos\gtk-demo\combobox.c" />
<File RelativePath="..\..\..\demos\gtk-demo\css_accordion.c" />
<File RelativePath="..\..\..\demos\gtk-demo\css_basics.c" />
<File RelativePath="..\..\..\demos\gtk-demo\css_pixbufs.c" />
<File RelativePath="..\..\..\demos\gtk-demo\css_shadows.c" />
<File RelativePath="..\..\..\demos\gtk-demo\css_multiplebgs.c" />
<File RelativePath="..\..\..\demos\gtk-demo\demo_resources.c" />
<File RelativePath="..\..\..\demos\gtk-demo\dialog.c" />

View File

@@ -20,6 +20,9 @@
/* Define the location where the catalogs will be installed */
#define GTK_LOCALEDIR "NONE/share/locale"
/* Define if we're using atk-bridge-2.0 */
/* #undef HAVE_ATK_BRIDGE */
/* Define to 1 if you have the `bind_textdomain_codeset' function. */
#define HAVE_BIND_TEXTDOMAIN_CODESET 1
@@ -296,11 +299,6 @@
/* Define to 1 if the X Window System is missing or not being used. */
/* #undef X_DISPLAY_MISSING */
/* Enable large inode numbers on Mac OS X 10.5. */
#ifndef _DARWIN_USE_64_BIT_INODE
# define _DARWIN_USE_64_BIT_INODE 1
#endif
/* Number of bits in a file offset, on hosts where this is settable. */
/* #undef _FILE_OFFSET_BITS */

View File

@@ -9,8 +9,8 @@
# set GTK_BINARY_AGE and GTK_INTERFACE_AGE to 0.
m4_define([gtk_major_version], [3])
m4_define([gtk_minor_version], [7])
m4_define([gtk_micro_version], [3])
m4_define([gtk_minor_version], [5])
m4_define([gtk_micro_version], [13])
m4_define([gtk_interface_age], [0])
m4_define([gtk_binary_age],
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])
@@ -39,7 +39,7 @@ AC_CONFIG_AUX_DIR([build-aux])
m4_define([gtk_binary_version], [3.0.0])
# required versions of other packages
m4_define([glib_required_version], [2.35.0])
m4_define([glib_required_version], [2.33.1])
m4_define([pango_required_version], [1.30.0])
m4_define([atk_required_version], [2.5.3])
m4_define([cairo_required_version], [1.10.0])
@@ -383,7 +383,7 @@ else
fi
AC_SUBST(DISABLE_ON_QUARTZ)
if test "x$enable_broadway_backend" = xyes; then
if test "x$enable_broadway_backend" == xyes; then
GDK_BACKENDS="$GDK_BACKENDS broadway"
cairo_backends="$cairo_backends cairo"
GDK_WINDOWING="$GDK_WINDOWING
@@ -394,8 +394,8 @@ else
AM_CONDITIONAL(USE_BROADWAY, false)
fi
if test "x$enable_wayland_backend" = "xyes"; then
if test "x$enable_wayland_cairo_gl" = "xyes"; then
if test "x$enable_wayland_backend" == "xyes"; then
if test "x$enable_wayland_cairo_gl" == "xyes"; then
# Wayland can use cairo-gl
cairo_backends="$cairo_backends cairo-gl"
AC_DEFINE(GDK_WAYLAND_USE_EGL, [1], [Whether to use EGL in Wayland backend])
@@ -407,8 +407,8 @@ if test "x$enable_wayland_backend" = "xyes"; then
have_gio_unix=yes
GDK_WINDOWING="$GDK_WINDOWING
#define GDK_WINDOWING_WAYLAND"
WAYLAND_PACKAGES="wayland-client >= 1.0.0 xkbcommon >= 0.2.0 wayland-cursor"
if test "x$enable_wayland_cairo_gl" = "xyes"; then
WAYLAND_PACKAGES="wayland-client xkbcommon wayland-cursor"
if test "x$enable_wayland_cairo_gl" == "xyes"; then
WAYLAND_PACKAGES="$WAYLAND_PACKAGES wayland-egl egl"
fi
AM_CONDITIONAL(USE_WAYLAND, true)
@@ -714,6 +714,7 @@ AM_PATH_GLIB_2_0(glib_required_version, :,
*** GLIB is always available from ftp://ftp.gtk.org/pub/gtk/.]),
gobject gmodule-no-export)
dnl
dnl Check for bind_textdomain_codeset, including -lintl if GLib brings it in.
dnl
gtk_save_LIBS=$LIBS
@@ -747,19 +748,6 @@ else
AC_MSG_RESULT([no])
fi
#
# Disable deprecation checks for all libraries we depend on on stable branches.
# This is so newer versions of those libraries don't cause more warnings with
# a stable GTK version.
# We don't ever want to turn off deprecation warnings for master however, because
# that's where we get rid of deprecated API we use.
#
if test m4_eval(gtk_minor_version % 2) = 0 ; then
AC_DEFINE_UNQUOTED(GLIB_DISABLE_DEPRECATION_WARNINGS, 1,
[Disable deprecation warnings from glib])
fi
dnl
saved_cflags="$CFLAGS"
saved_ldflags="$LDFLAGS"

View File

@@ -18,8 +18,6 @@ demos = \
css_accordion.c \
css_basics.c \
css_multiplebgs.c \
css_pixbufs.c \
css_shadows.c \
dialog.c \
drawingarea.c \
editable_cells.c \
@@ -120,8 +118,6 @@ RESOURCES= application.ui \
css_accordion.css \
css_basics.css \
css_multiplebgs.css \
css_pixbufs.css \
css_shadows.css \
cssview.css \
fancy.css \
reset.css

View File

@@ -61,7 +61,6 @@ do_css_accordion (GtkWidget *do_widget)
data = g_bytes_get_data (bytes, &data_size);
gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (provider), (gchar *)data, data_size, NULL);
g_bytes_unref (bytes);
apply_css (window, provider);
}

View File

@@ -1,4 +1,4 @@
@import url("resource:///reset.css");
@import url("reset.css");
* {
transition-property: color, background-color, border-color, background-image, padding, border-width;
@@ -49,4 +49,4 @@ GtkWindow {
.button:hover:active,
.button:active {
background-color: #993401;
}
}

View File

@@ -100,7 +100,6 @@ do_css_basics (GtkWidget *do_widget)
bytes = g_resources_lookup_data ("/css_basics/gtk.css", 0, NULL);
gtk_text_buffer_set_text (text, g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes));
g_bytes_unref (bytes);
g_signal_connect (provider,
"parsing-error",

View File

@@ -6,7 +6,7 @@
/* This CSS resets all properties to their defaults values
* and overrides all user settings and the theme in use */
@import url("resource:///reset.css");
@import url("reset.css");
/* Set a very futuristic style by default */
* {

View File

@@ -149,7 +149,6 @@ do_css_multiplebgs (GtkWidget *do_widget)
bytes = g_resources_lookup_data ("/css_multiplebgs/gtk.css", 0, NULL);
gtk_text_buffer_set_text (text, g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes));
g_bytes_unref (bytes);
g_signal_connect (provider,
"parsing-error",

View File

@@ -6,8 +6,8 @@
/* This CSS resets all properties to their defaults values
* and overrides all user settings and the theme in use */
@import url("resource:///reset.css");
@import url("resource:///cssview.css");
@import url("reset.css");
@import url("cssview.css");
#canvas {
transition-property: background-color, background-image;
@@ -56,7 +56,7 @@
/*
#bricks-button {
background-color: #eef;
background-image: url('resource:///css_multiplebgs/brick.png');
background-image: url('brick.png');
background-repeat: no-repeat;
background-position: center;
}
@@ -133,4 +133,4 @@
background-image: linear-gradient(90deg, transparent 79px, alpha(#999, 0.40) 79px, #999 80px, alpha(#999, 0.40) 81px, transparent 81px),
linear-gradient(alpha(#bbb, 0.60), alpha(#bbb, 0.60) 1px, transparent 1px);
}
*/
*/

View File

@@ -1,127 +0,0 @@
/* CSS Theming/Animated backgrounds
*
* This demo is done in honour of the Pixbufs demo further down. It is done exclusively
* with CSS as the background of the window.
*/
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
static void
show_parsing_error (GtkCssProvider *provider,
GtkCssSection *section,
const GError *error,
GtkTextBuffer *buffer)
{
GtkTextIter start, end;
const char *tag_name;
gtk_text_buffer_get_iter_at_line_index (buffer,
&start,
gtk_css_section_get_start_line (section),
gtk_css_section_get_start_position (section));
gtk_text_buffer_get_iter_at_line_index (buffer,
&end,
gtk_css_section_get_end_line (section),
gtk_css_section_get_end_position (section));
if (g_error_matches (error, GTK_CSS_PROVIDER_ERROR, GTK_CSS_PROVIDER_ERROR_DEPRECATED))
tag_name = "warning";
else
tag_name = "error";
gtk_text_buffer_apply_tag_by_name (buffer, tag_name, &start, &end);
}
static void
css_text_changed (GtkTextBuffer *buffer,
GtkCssProvider *provider)
{
GtkTextIter start, end;
char *text;
gtk_text_buffer_get_start_iter (buffer, &start);
gtk_text_buffer_get_end_iter (buffer, &end);
gtk_text_buffer_remove_all_tags (buffer, &start, &end);
text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
gtk_css_provider_load_from_data (provider, text, -1, NULL);
g_free (text);
gtk_style_context_reset_widgets (gdk_screen_get_default ());
}
static void
apply_css (GtkWidget *widget, GtkStyleProvider *provider)
{
gtk_style_context_add_provider (gtk_widget_get_style_context (widget), provider, G_MAXUINT);
if (GTK_IS_CONTAINER (widget))
gtk_container_forall (GTK_CONTAINER (widget), (GtkCallback) apply_css, provider);
}
GtkWidget *
do_css_pixbufs (GtkWidget *do_widget)
{
if (!window)
{
GtkWidget *paned, *container, *child;
GtkStyleProvider *provider;
GtkTextBuffer *text;
GBytes *bytes;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget));
gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
paned = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
gtk_container_add (GTK_CONTAINER (window), paned);
/* Need a filler so we get a handle */
child = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add (GTK_CONTAINER (paned), child);
text = gtk_text_buffer_new (NULL);
gtk_text_buffer_create_tag (text,
"warning",
"underline", PANGO_UNDERLINE_SINGLE,
NULL);
gtk_text_buffer_create_tag (text,
"error",
"underline", PANGO_UNDERLINE_ERROR,
NULL);
provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ());
container = gtk_scrolled_window_new (NULL, NULL);
gtk_container_add (GTK_CONTAINER (paned), container);
child = gtk_text_view_new_with_buffer (text);
gtk_container_add (GTK_CONTAINER (container), child);
g_signal_connect (text,
"changed",
G_CALLBACK (css_text_changed),
provider);
bytes = g_resources_lookup_data ("/css_pixbufs/gtk.css", 0, NULL);
gtk_text_buffer_set_text (text, g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes));
g_signal_connect (provider,
"parsing-error",
G_CALLBACK (show_parsing_error),
gtk_text_view_get_buffer (GTK_TEXT_VIEW (child)));
apply_css (window, provider);
}
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
return window;
}

View File

@@ -6,8 +6,8 @@
/* This CSS resets all properties to their defaults values
* and overrides all user settings and the theme in use */
@import url("resource:///reset.css");
@import url("resource:///cssview.css");
@import url("reset.css");
@import url("cssview.css");
@keyframes move-the-image {
0% { background-position: 50.00% 75.00%, 67.68% 67.68%, 75.00% 50.00%, 67.68% 32.32%, 50.00% 25.00%, 32.32% 32.32%, 25.00% 50.00%, 32.32% 67.68%, 0% 0%; }
@@ -46,31 +46,21 @@
}
@keyframes size-the-image {
0% { background-size: 96px, 12px, 96px, 12px, 96px, 12px, 96px, 12px, auto }
100% { background-size: 12px, 96px, 12px, 96px, 12px, 96px, 12px, 96px, auto }
0% { background-size: 96px, 12px, 96px, 12px, 96px, 12px, 96px, 12px, 100% }
100% { background-size: 12px, 96px, 12px, 96px, 12px, 96px, 12px, 96px, 100% }
}
GtkWindow {
background-image: url("resource:///css_pixbufs/apple-red.png"),
url("resource:///css_pixbufs/gnome-applets.png"),
url("resource:///css_pixbufs/gnome-calendar.png"),
url("resource:///css_pixbufs/gnome-foot.png"),
url("resource:///css_pixbufs/gnome-gmush.png"),
url("resource:///css_pixbufs/gnome-gimp.png"),
url("resource:///css_pixbufs/gnome-gsame.png"),
url("resource:///css_pixbufs/gnu-keys.png"),
url("resource:///css_pixbufs/background.jpg");
background-image: url("apple-red.png"),
url("gnome-applets.png"),
url("gnome-calendar.png"),
url("gnome-foot.png"),
url("gnome-gmush.png"),
url("gnome-gimp.png"),
url("gnome-gsame.png"),
url("gnu-keys.png"),
url("background.jpg");
background-position: 50.00% 75.00%, 67.68% 67.68%, 75.00% 50.00%, 67.68% 32.32%, 50.00% 25.00%, 32.32% 32.32%, 25.00% 50.00%, 32.32% 67.68%, 0% 0%;
background-repeat: no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, repeat;
animation: move-the-image infinite linear 3s, size-the-image infinite alternate ease-in-out 0.75s;
}
/* Make the text editor has a nice style */
.view, .scrollbar, .pane-separator {
color: black;
background-color: rgba(255,255,255,0.5);
}
.view:selected {
background-color: rgba(127,127,255,0.5);
}

View File

@@ -1,147 +0,0 @@
/* CSS Theming/Shadows
*
* This demo shows how to use CSS shadows.
*/
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
static void
show_parsing_error (GtkCssProvider *provider,
GtkCssSection *section,
const GError *error,
GtkTextBuffer *buffer)
{
GtkTextIter start, end;
const char *tag_name;
gtk_text_buffer_get_iter_at_line_index (buffer,
&start,
gtk_css_section_get_start_line (section),
gtk_css_section_get_start_position (section));
gtk_text_buffer_get_iter_at_line_index (buffer,
&end,
gtk_css_section_get_end_line (section),
gtk_css_section_get_end_position (section));
if (g_error_matches (error, GTK_CSS_PROVIDER_ERROR, GTK_CSS_PROVIDER_ERROR_DEPRECATED))
tag_name = "warning";
else
tag_name = "error";
gtk_text_buffer_apply_tag_by_name (buffer, tag_name, &start, &end);
}
static void
css_text_changed (GtkTextBuffer *buffer,
GtkCssProvider *provider)
{
GtkTextIter start, end;
char *text;
gtk_text_buffer_get_start_iter (buffer, &start);
gtk_text_buffer_get_end_iter (buffer, &end);
gtk_text_buffer_remove_all_tags (buffer, &start, &end);
text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
gtk_css_provider_load_from_data (provider, text, -1, NULL);
g_free (text);
gtk_style_context_reset_widgets (gdk_screen_get_default ());
}
static void
apply_css (GtkWidget *widget, GtkStyleProvider *provider)
{
gtk_style_context_add_provider (gtk_widget_get_style_context (widget), provider, G_MAXUINT);
if (GTK_IS_CONTAINER (widget))
gtk_container_forall (GTK_CONTAINER (widget), (GtkCallback) apply_css, provider);
}
GtkWidget *
create_toolbar (void)
{
GtkWidget *toolbar;
GtkToolItem *item;
toolbar = gtk_toolbar_new ();
gtk_widget_set_valign (toolbar, GTK_ALIGN_CENTER);
item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_FORWARD);
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_BACK);
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
item = gtk_tool_button_new (NULL, "Hello World");
gtk_tool_item_set_is_important (item, TRUE);
gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
return toolbar;
}
GtkWidget *
do_css_shadows (GtkWidget *do_widget)
{
if (!window)
{
GtkWidget *paned, *container, *child;
GtkStyleProvider *provider;
GtkTextBuffer *text;
GBytes *bytes;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget));
gtk_window_set_default_size (GTK_WINDOW (window), 400, 300);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
paned = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
gtk_container_add (GTK_CONTAINER (window), paned);
child = create_toolbar ();
gtk_container_add (GTK_CONTAINER (paned), child);
text = gtk_text_buffer_new (NULL);
gtk_text_buffer_create_tag (text,
"warning",
"underline", PANGO_UNDERLINE_SINGLE,
NULL);
gtk_text_buffer_create_tag (text,
"error",
"underline", PANGO_UNDERLINE_ERROR,
NULL);
provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ());
container = gtk_scrolled_window_new (NULL, NULL);
gtk_container_add (GTK_CONTAINER (paned), container);
child = gtk_text_view_new_with_buffer (text);
gtk_container_add (GTK_CONTAINER (container), child);
g_signal_connect (text,
"changed",
G_CALLBACK (css_text_changed),
provider);
bytes = g_resources_lookup_data ("/css_shadows/gtk.css", 0, NULL);
gtk_text_buffer_set_text (text, g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes));
g_signal_connect (provider,
"parsing-error",
G_CALLBACK (show_parsing_error),
gtk_text_view_get_buffer (GTK_TEXT_VIEW (child)));
apply_css (window, provider);
}
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
return window;
}

View File

@@ -1,44 +0,0 @@
/* You can edit the text in this window to change the
* appearance of this Window.
* Be careful, if you screw it up, nothing might be visible
* anymore. :)
*/
/* This CSS resets all properties to their defaults values
* and overrides all user settings and the theme in use */
@import url("resource:///reset.css");
@import url("resource:///cssview.css");
/* Get a nice background for the window */
.background {
background-color: #4870bc;
background-image: linear-gradient(to left, transparent, rgba(255,255,255,.07) 50%, transparent 50%),
linear-gradient(to left, transparent, rgba(255,255,255,.13) 50%, transparent 50%),
linear-gradient(to left, transparent, transparent 50%, rgba(255,255,255,.17) 50%),
linear-gradient(to left, transparent, transparent 50%, rgba(255,255,255,.19) 50%);
background-size: 29px, 59px, 73px, 109px;
}
.button {
color: black;
padding: 10px;
border-radius: 5px;
transition: all 250ms ease-in;
border: 1px transparent solid;
}
.button:hover {
text-shadow: 3px 3px 5px alpha(black, 0.75);
icon-shadow: 3px 3px 5px alpha(black, 0.75);
box-shadow: 3px 3px 5px alpha(black, 0.5) inset;
border: solid 1px alpha(black, 0.75);
}
.button:active {
padding: 11px 9px 9px 11px;
text-shadow: 1px 1px 2.5px alpha(black, 0.6);
icon-shadow: 1px 1px 2.5px alpha(black, 0.6);
}

View File

@@ -20,7 +20,6 @@
</gresource>
<gresource prefix="/css_multiplebgs">
<file alias="gtk.css">css_multiplebgs.css</file>
<file>brick.png</file>
</gresource>
<gresource prefix="/theming_custom_css">
<file alias="gtk.css">fancy.css</file>
@@ -28,19 +27,4 @@
<gresource prefix="/theming_style_classes">
<file preprocess="xml-stripblanks">theming.ui</file>
</gresource>
<gresource prefix="/css_pixbufs">
<file alias="gtk.css">css_pixbufs.css</file>
<file>background.jpg</file>
<file>apple-red.png</file>
<file>gnome-applets.png</file>
<file>gnome-calendar.png</file>
<file>gnome-foot.png</file>
<file>gnome-gmush.png</file>
<file>gnome-gimp.png</file>
<file>gnome-gsame.png</file>
<file>gnu-keys.png</file>
</gresource>
<gresource prefix="/css_shadows">
<file alias="gtk.css">css_shadows.css</file>
</gresource>
</gresources>

View File

@@ -1,65 +1,24 @@
GtkButton#fancy {
transition: none;
background-image: linear-gradient(to bottom,
alpha(white, 0.7),
alpha(white, 0) 30%),
linear-gradient(to top,
alpha(#babdb6, 0.4),
alpha(#babdb6, 0) 50%),
linear-gradient(135deg,
#eeeeec,
white 20%,
#d3d7cf,
white 80%,
#babdb6);
color: #3465a4;
font-weight: bold;
text-shadow: 0 1px white;
font-weight: bold;
background-image: linear-gradient(135deg, yellow, blue);
border-radius: 20px;
color: white;
}
GtkButton#fancy:hover {
transition: all 250ms linear;
background-image: linear-gradient(to bottom,
alpha(white, 1),
alpha(white, 0)),
linear-gradient(135deg,
#eeeeec 10%,
white 40%,
#d3d7cf,
white 70%,
#babdb6);
color: #204a87;
font-weight: bold;
background-image: linear-gradient(135deg, blue, yellow);
border-radius: 20px;
color: white;
}
GtkButton#fancy:active,
GtkButton#fancy:active:hover {
transition: none;
background-image: linear-gradient(to bottom,
alpha(#555753, 0.5),
alpha(#babdb6, 0.3)),
linear-gradient(135deg,
#eeeeec,
white 20%,
#d3d7cf,
white 80%,
#babdb6);
color: white;
text-shadow: 0 1px black;
}
GtkButton#fancy:backdrop,
GtkButton#fancy:backdrop:hover {
transition: none;
background-image: linear-gradient(135deg,
alpha(#eeeeec, 0.5) 10%,
alpha(white, 0.5) 40%,
alpha(#d3d7cf, 0.5),
alpha(white, 0.5) 70%,
alpha(#babdb6, 0.5));
color: #babdb6;
GtkButton#fancy:active {
font-weight: bold;
background-image: linear-gradient(yellow, yellow);
border-radius: 20px;
color: black;
}
GtkButton#fancy * {
/* Yeah this should be inherited by default */
color: inherit;
color: inherit;
}

View File

@@ -579,7 +579,10 @@ load_file (const gchar *filename)
}
if (current_file && !strcmp (current_file, names[0]))
goto out;
{
g_string_free (buffer, TRUE);
return;
}
g_free (current_file);
current_file = g_strdup (names[0]);
@@ -595,7 +598,7 @@ load_file (const gchar *filename)
{
g_warning ("%s", err->message);
g_error_free (err);
goto out;
return;
}
file = g_fopen (full_filename, "r");
@@ -606,7 +609,7 @@ load_file (const gchar *filename)
g_free (full_filename);
if (!file)
goto out;
return;
gtk_text_buffer_get_iter_at_offset (info_buffer, &start, 0);
while (read_line (file, buffer))
@@ -722,7 +725,6 @@ load_file (const gchar *filename)
fontify ();
out:
g_string_free (buffer, TRUE);
g_strfreev (names);

View File

@@ -149,6 +149,8 @@ do_printing (GtkWidget *do_widget)
GtkPrintOperation *operation;
GtkPrintSettings *settings;
PrintData *data;
gchar *uri, *ext;
const gchar *dir;
GError *error = NULL;
operation = gtk_print_operation_new ();
@@ -168,14 +170,25 @@ do_printing (GtkWidget *do_widget)
gtk_print_operation_set_embed_page_setup (operation, TRUE);
settings = gtk_print_settings_new ();
dir = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS);
if (dir == NULL)
dir = g_get_home_dir ();
if (g_strcmp0 (gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT), "ps") == 0)
ext = ".ps";
else if (g_strcmp0 (gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT), "svg") == 0)
ext = ".svg";
else
ext = ".pdf";
gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_OUTPUT_BASENAME, "gtk-demo");
uri = g_strconcat ("file://", dir, "/", "gtk-demo", ext, NULL);
gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_OUTPUT_URI, uri);
gtk_print_operation_set_print_settings (operation, settings);
gtk_print_operation_run (operation, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW (do_widget), &error);
g_object_unref (operation);
g_object_unref (settings);
g_free (uri);
if (error)
{

View File

@@ -65,26 +65,12 @@ show_about (GtkMenuItem *item, GtkWidget *window)
g_object_unref (pixbuf);
}
static void
on_page_toggled (GtkToggleButton *button,
GtkNotebook *pages)
{
gint page;
if (!gtk_toggle_button_get_active (button))
return;
page = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button), "page"));
gtk_notebook_set_current_page (pages, page);
}
int
main (int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window;
GtkWidget *widget;
GtkWidget *notebook;
gboolean dark = FALSE;
gtk_init (&argc, &argv);
@@ -102,15 +88,6 @@ main (int argc, char *argv[])
g_signal_connect (widget, "toggled", G_CALLBACK (dark_toggled), NULL);
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (widget), dark);
notebook = (GtkWidget*) gtk_builder_get_object (builder, "toplevel_notebook");
widget = (GtkWidget*) gtk_builder_get_object (builder, "togglepage1");
g_object_set_data (G_OBJECT (widget), "page", GINT_TO_POINTER (0));
g_signal_connect (widget, "toggled", G_CALLBACK (on_page_toggled), notebook);
widget = (GtkWidget*) gtk_builder_get_object (builder, "togglepage2");
g_object_set_data (G_OBJECT (widget), "page", GINT_TO_POINTER (1));
g_signal_connect (widget, "toggled", G_CALLBACK (on_page_toggled), notebook);
widget = (GtkWidget*) gtk_builder_get_object (builder, "aboutmenuitem");
g_signal_connect (widget, "activate", G_CALLBACK (show_about), window);

File diff suppressed because it is too large Load Diff

View File

@@ -89,20 +89,25 @@ Make sure that gtk-doc is the latest released version.
it to download.gnome.org. If you don't have an account on master.gnome.org,
find someone who can do it for you. The command for this looks like
scp gtk+-2.12.10.tar.xz matthiasc@master.gnome.org:
ssh matthiasc@master.gnome.org ftpadmin install gtk+-2.12.10.tar.xz
scp gtk+-2.12.10.tar.gz matthiasc@master.gnome.org:
ssh matthiasc@master.gnome.org
install-module gtk+-2.12.10.tar.gz
15) Upload the tarball and checksum to ftp.gtk.org and put them in the right
directory below /ftp/pub. Pay attention to correct ownership, and don't
forget to update the LATEST file in the directory.
15) Get the .bz2 tarball and the .md5sum files back from master.gnome.org
You can probably also create it locally, but I've experienced md5
mismatches when doing so.
16) Go to the gnome-announce list archives, find the last announce message,
16) Upload the .gz and .bz2 tarballs and checksums to ftp.gtk.org and put
them in the right directory below /ftp/pub. Pay attention to correct
ownership, and don't forget to update the LATEST file in the directory.
17) Go to the gnome-announce list archives, find the last announce message,
create a new message in the same form, replacing version numbers,
commentary at the top about "what this release is about" and the
summary of changes.
17) Send it to gnome-announce-list, gtk-list, gtk-app-devel-list and
18) Send it to gnome-announce-list, gtk-list, gtk-app-devel-list and
gtk-devel-list. Set reply-to to desktop-devel-list.
18) Add a link to the release announcement to www.gtk.org which lives
19) Add a link to the release announcement to www.gtk.org which lives
in the gtk-web git module.

View File

@@ -12,7 +12,7 @@
The latest versions can be found online at
<ulink role="online-location" url="http://developer.gnome.org/gdk3/">http://developer.gnome.org/gdk3/</ulink>.
If you are looking for the older GDK 2 series of libraries,
see <ulink role="online-location" url="http://developer.gnome.org/gdk2/">http://developer.gnome.org/gdk2/</ulink>.
see <ulink role="online-location" url="http://developer.gnome.org/gdk/">http://developer.gnome.org/gdk/</ulink>.
</releaseinfo>
</bookinfo>
@@ -42,7 +42,7 @@
<xi:include href="xml/cairo_interaction.xml" />
<xi:include href="xml/x_interaction.xml" />
<xi:include href="xml/gdkapplaunchcontext.xml" />
<xi:include href="xml/gdktestutils.xml" />
<xi:include href="xml/gdktesting.xml" />
</reference>
<index id="api-index-full">

View File

@@ -1145,8 +1145,8 @@ gdk_app_launch_context_get_type
<SECTION>
<TITLE>Testing</TITLE>
<FILE>gdktestutils</FILE>
<FILE>gdktesting</FILE>
gdk_test_render_sync
gdk_test_simulate_button
gdk_test_simulate_key
</SECTION>

View File

@@ -5,7 +5,7 @@
<chapter id="gtk-getting-started" xmlns:xi="http://www.w3.org/2003/XInclude">
<title>Getting Started with GTK+</title>
<para>This chapter contains some tutorial information to get you
<para>This chapter is contains some tutorial information to get you
started with GTK+ programming. It assumes that you have GTK+, its
dependencies and a C compiler installed and ready to use. If you
need to build GTK+ itself first, refer to the

View File

@@ -14,7 +14,7 @@
The latest versions can be found online at
<ulink role="online-location" url="http://developer.gnome.org/gtk3/">http://developer.gnome.org/gtk3/</ulink>.
If you are looking for the older GTK+ 2 series of libraries,
see <ulink role="online-location" url="http://developer.gnome.org/gtk2/">http://developer.gnome.org/gtk2/</ulink>.
see <ulink role="online-location" url="http://developer.gnome.org/gtk/">http://developer.gnome.org/gtk/</ulink>.
</releaseinfo>
</bookinfo>

View File

@@ -139,7 +139,6 @@ gtk_accel_label_set_accel_closure
gtk_accel_label_get_accel_widget
gtk_accel_label_set_accel_widget
gtk_accel_label_get_accel_width
gtk_accel_label_set_accel
gtk_accel_label_refetch
<SUBSECTION Standard>
GTK_ACCEL_LABEL
@@ -264,8 +263,6 @@ gtk_action_group_get_sensitive
gtk_action_group_set_sensitive
gtk_action_group_get_visible
gtk_action_group_set_visible
gtk_action_group_get_accel_group
gtk_action_group_set_accel_group
gtk_action_group_get_action
gtk_action_group_list_actions
gtk_action_group_add_action
@@ -533,7 +530,6 @@ gtk_builder_add_from_resource
gtk_builder_add_from_string
gtk_builder_add_objects_from_file
gtk_builder_add_objects_from_string
gtk_builder_add_objects_from_resource
gtk_builder_get_object
gtk_builder_get_objects
gtk_builder_connect_signals
@@ -587,8 +583,6 @@ gtk_button_set_image
gtk_button_get_image
gtk_button_set_image_position
gtk_button_get_image_position
gtk_button_set_always_show_image
gtk_button_get_always_show_image
gtk_button_get_event_window
<SUBSECTION Standard>
@@ -1052,8 +1046,6 @@ gtk_entry_get_layout
gtk_entry_get_layout_offsets
gtk_entry_layout_index_to_text_index
gtk_entry_text_index_to_layout_index
gtk_entry_set_attributes
gtk_entry_get_attributes
gtk_entry_get_max_length
gtk_entry_get_visibility
gtk_entry_set_completion
@@ -1816,7 +1808,6 @@ gtk_image_new_from_stock
gtk_image_new_from_animation
gtk_image_new_from_icon_name
gtk_image_new_from_gicon
gtk_image_new_from_resource
gtk_image_set_from_file
gtk_image_set_from_icon_set
gtk_image_set_from_pixbuf
@@ -1824,7 +1815,6 @@ gtk_image_set_from_stock
gtk_image_set_from_animation
gtk_image_set_from_icon_name
gtk_image_set_from_gicon
gtk_image_set_from_resource
gtk_image_clear
gtk_image_new
gtk_image_set_pixel_size
@@ -2254,7 +2244,6 @@ gtk_menu_shell_set_take_focus
gtk_menu_shell_get_take_focus
gtk_menu_shell_get_selected_item
gtk_menu_shell_get_parent_shell
gtk_menu_shell_bind_model
GtkMenuDirectionType
<SUBSECTION Standard>
GTK_MENU_SHELL
@@ -3281,8 +3270,6 @@ gtk_level_bar_set_min_value
gtk_level_bar_get_min_value
gtk_level_bar_set_max_value
gtk_level_bar_get_max_value
gtk_level_bar_set_inverted
gtk_level_bar_get_inverted
gtk_level_bar_add_offset_value
gtk_level_bar_remove_offset_value
gtk_level_bar_get_offset_value
@@ -5291,7 +5278,6 @@ gtk_widget_get_sensitive
gtk_widget_is_sensitive
gtk_widget_get_state
gtk_widget_get_visible
gtk_widget_is_visible
gtk_widget_set_visible
gtk_widget_set_state_flags
gtk_widget_unset_state_flags
@@ -5779,8 +5765,6 @@ GTK_STYLE_CLASS_LINKED
GTK_STYLE_CLASS_ARROW
GTK_STYLE_CLASS_OSD
GTK_STYLE_CLASS_LEVEL_BAR
GTK_STYLE_CLASS_CURSOR_HANDLE
GTK_STYLE_CLASS_INSERTION_CURSOR
GTK_STYLE_REGION_COLUMN
GTK_STYLE_REGION_COLUMN_HEADER
GTK_STYLE_REGION_ROW
@@ -5990,7 +5974,6 @@ gtk_gradient_add_color_stop
gtk_gradient_ref
gtk_gradient_unref
gtk_gradient_resolve
gtk_gradient_resolve_for_context
gtk_gradient_to_string
<SUBSECTION Standard>
@@ -7123,7 +7106,6 @@ gtk_application_add_window
gtk_application_remove_window
gtk_application_get_windows
gtk_application_get_window_by_id
gtk_application_get_active_window
<SUBSECTION>
GtkApplicationInhibitFlags

View File

@@ -55,7 +55,6 @@ noinst_PROGRAMS = \
bloatpad \
plugman \
sunny \
action-namespace \
grid-packing \
drawing \
builder

View File

@@ -1,134 +0,0 @@
#include <gtk/gtk.h>
static void
action_activated (GSimpleAction *action,
GVariant *parameter,
gpointer user_data)
{
GtkWindow *parent = user_data;
GtkWidget *dialog;
dialog = gtk_message_dialog_new (parent,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_CLOSE,
"Activated action `%s`",
g_action_get_name (G_ACTION (action)));
g_signal_connect_swapped (dialog, "response",
G_CALLBACK (gtk_widget_destroy), dialog);
gtk_widget_show_all (dialog);
}
static GActionEntry doc_entries[] = {
{ "save", action_activated },
{ "print", action_activated },
{ "share", action_activated }
};
static GActionEntry win_entries[] = {
{ "fullscreen", action_activated },
{ "close", action_activated },
};
const gchar *menu_ui =
"<interface>"
" <menu id='doc-menu'>"
" <section>"
" <item>"
" <attribute name='label'>_Save</attribute>"
" <attribute name='action'>save</attribute>"
" </item>"
" <item>"
" <attribute name='label'>_Print</attribute>"
" <attribute name='action'>print</attribute>"
" </item>"
" <item>"
" <attribute name='label'>_Share</attribute>"
" <attribute name='action'>share</attribute>"
" </item>"
" </section>"
" </menu>"
" <menu id='win-menu'>"
" <section>"
" <item>"
" <attribute name='label'>_Fullscreen</attribute>"
" <attribute name='action'>fullscreen</attribute>"
" </item>"
" <item>"
" <attribute name='label'>_Close</attribute>"
" <attribute name='action'>close</attribute>"
" </item>"
" </section>"
" </menu>"
"</interface>";
static void
activate (GApplication *app,
gpointer user_data)
{
GtkWidget *win;
GtkWidget *button;
GSimpleActionGroup *doc_actions;
GtkBuilder *builder;
GMenuModel *doc_menu;
GMenuModel *win_menu;
GMenu *button_menu;
GMenuItem *section;
if (gtk_application_get_windows (GTK_APPLICATION (app)) != NULL)
return;
win = gtk_application_window_new (GTK_APPLICATION (app));
doc_actions = g_simple_action_group_new ();
g_simple_action_group_add_entries (doc_actions, doc_entries,
G_N_ELEMENTS (doc_entries), win);
g_action_map_add_action_entries (G_ACTION_MAP (win), win_entries,
G_N_ELEMENTS (win_entries), win);
builder = gtk_builder_new ();
gtk_builder_add_from_string (builder, menu_ui, -1, NULL);
doc_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "doc-menu"));
win_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "win-menu"));
button_menu = g_menu_new ();
section = g_menu_item_new_section (NULL, doc_menu);
g_menu_item_set_attribute (section, "action-namespace", "s", "doc");
g_menu_append_item (button_menu, section);
g_object_unref (section);
section = g_menu_item_new_section (NULL, win_menu);
g_menu_item_set_attribute (section, "action-namespace", "s", "win");
g_menu_append_item (button_menu, section);
g_object_unref (section);
button = gtk_menu_button_new ();
gtk_button_set_label (GTK_BUTTON (button), "Menu");
gtk_widget_insert_action_group (button, "doc", G_ACTION_GROUP (doc_actions));
gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), G_MENU_MODEL (button_menu));
gtk_container_add (GTK_CONTAINER (win), button);
gtk_container_set_border_width (GTK_CONTAINER (win), 12);
gtk_widget_show_all (win);
g_object_unref (button_menu);
g_object_unref (doc_actions);
g_object_unref (builder);
}
int
main(int argc,
char **argv)
{
GtkApplication *app;
app = gtk_application_new ("org.gtk.Example", 0);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
return g_application_run (G_APPLICATION (app), argc, argv);
}

View File

@@ -191,14 +191,7 @@ bloat_pad_open (GApplication *application,
new_window (application, files[i]);
}
typedef struct
{
GtkApplication parent_instance;
GMenu *time;
guint timeout;
} BloatPad;
typedef GtkApplication BloatPad;
typedef GtkApplicationClass BloatPadClass;
G_DEFINE_TYPE (BloatPad, bloat_pad, GTK_TYPE_APPLICATION)
@@ -241,65 +234,15 @@ quit_activated (GSimpleAction *action,
g_application_quit (app);
}
static gboolean
update_time (gpointer user_data)
{
BloatPad *bloatpad = user_data;
GDateTime *now;
gchar *time;
while (g_menu_model_get_n_items (G_MENU_MODEL (bloatpad->time)))
g_menu_remove (bloatpad->time, 0);
g_message ("Updating the time menu (which should be open now)...");
now = g_date_time_new_now_local ();
time = g_date_time_format (now, "%c");
g_menu_append (bloatpad->time, time, NULL);
g_date_time_unref (now);
g_free (time);
return G_SOURCE_CONTINUE;
}
static void
time_active_changed (GSimpleAction *action,
GVariant *state,
gpointer user_data)
{
BloatPad *bloatpad = user_data;
if (g_variant_get_boolean (state))
{
if (!bloatpad->timeout)
{
bloatpad->timeout = g_timeout_add (1000, update_time, bloatpad);
update_time (bloatpad);
}
}
else
{
if (bloatpad->timeout)
{
g_source_remove (bloatpad->timeout);
bloatpad->timeout = 0;
}
}
g_simple_action_set_state (action, state);
}
static GActionEntry app_entries[] = {
{ "new", new_activated, NULL, NULL, NULL },
{ "about", about_activated, NULL, NULL, NULL },
{ "quit", quit_activated, NULL, NULL, NULL },
{ "time-active", NULL, NULL, "false", time_active_changed }
};
static void
bloat_pad_startup (GApplication *application)
{
BloatPad *bloatpad = (BloatPad*) application;
GtkBuilder *builder;
G_APPLICATION_CLASS (bloat_pad_parent_class)
@@ -358,34 +301,13 @@ bloat_pad_startup (GApplication *application)
" </item>"
" </section>"
" </submenu>"
" <submenu id='time-menu'>"
" <attribute name='label' translatable='yes'>Time</attribute>"
" <attribute name='submenu-action'>app.time-active</attribute>"
" </submenu>"
" </menu>"
"</interface>", -1, NULL);
gtk_application_set_app_menu (GTK_APPLICATION (application), G_MENU_MODEL (gtk_builder_get_object (builder, "app-menu")));
gtk_application_set_menubar (GTK_APPLICATION (application), G_MENU_MODEL (gtk_builder_get_object (builder, "menubar")));
//gtk_application_set_menubar (GTK_APPLICATION (application), G_MENU_MODEL (gtk_builder_get_object (builder, "app-menu")));
bloatpad->time = G_MENU (gtk_builder_get_object (builder, "time-menu"));
g_object_unref (builder);
}
static void
bloat_pad_shutdown (GApplication *application)
{
BloatPad *bloatpad = (BloatPad *) application;
if (bloatpad->timeout)
{
g_source_remove (bloatpad->timeout);
bloatpad->timeout = 0;
}
G_APPLICATION_CLASS (bloat_pad_parent_class)
->shutdown (application);
}
static void
bloat_pad_init (BloatPad *app)
{
@@ -398,7 +320,6 @@ bloat_pad_class_init (BloatPadClass *class)
GObjectClass *object_class = G_OBJECT_CLASS (class);
application_class->startup = bloat_pad_startup;
application_class->shutdown = bloat_pad_shutdown;
application_class->activate = bloat_pad_activate;
application_class->open = bloat_pad_open;
@@ -409,7 +330,9 @@ bloat_pad_class_init (BloatPadClass *class)
BloatPad *
bloat_pad_new (void)
{
BloatPad *bloat_pad;
GtkApplication *bloat_pad;
g_type_init ();
g_set_application_name ("Bloatpad");

View File

@@ -465,6 +465,8 @@ plug_man_class_init (PlugManClass *class)
PlugMan *
plug_man_new (void)
{
g_type_init ();
return g_object_new (plug_man_get_type (),
"application-id", "org.gtk.Test.plugman",
"flags", G_APPLICATION_HANDLES_OPEN,

View File

@@ -191,6 +191,8 @@ menu_button_class_init (MenuButtonClass *class)
MenuButton *
menu_button_new (void)
{
g_type_init ();
return g_object_new (menu_button_get_type (),
"application-id", "org.gtk.Test.Sunny",
"flags", G_APPLICATION_HANDLES_OPEN,

View File

@@ -341,8 +341,7 @@ gdkmarshalers.h: @REBUILD@ gdkmarshalers.list
&& mv gdkmarshalers-h.tmp gdkmarshalers.h \
|| ( rm -f gdkmarshalers-h.tmp && exit 1)
gdkmarshalers.c: @REBUILD@ gdkmarshalers.list
$(AM_V_GEN) (echo "#include \"gdkmarshalers.h\""; \
$(GLIB_GENMARSHAL) --prefix=_gdk_marshal $(srcdir)/gdkmarshalers.list --body) > gdkmarshalers-c.tmp \
$(AM_V_GEN) $(GLIB_GENMARSHAL) --prefix=_gdk_marshal $(srcdir)/gdkmarshalers.list --body > gdkmarshalers-c.tmp \
&& mv gdkmarshalers-c.tmp gdkmarshalers.c \
|| ( rm -f gdkmarshalers-c.tmp && exit 1 )

View File

@@ -31,12 +31,12 @@ libbroadway_la_SOURCES = \
broadway.c
clienthtml.h: client.html
$(PERL) $(srcdir)/toarray.pl $(srcdir)/client.html client_html > $@
$(PERL) ./toarray.pl client.html client_html > $@
EXTRA_DIST += client.html
broadwayjs.h: broadway.js
$(PERL) $(srcdir)/toarray.pl $(srcdir)/broadway.js broadway_js > $@
$(PERL) ./toarray.pl broadway.js broadway_js > $@
EXTRA_DIST += broadway.js

View File

@@ -57,44 +57,8 @@ base64_uint32 (guint32 v, char *c)
* conversion of raw image data to png data: uris *
***********************************************************/
static cairo_status_t
write_png_data (void *closure,
const unsigned char *data,
unsigned int data_len)
{
GString *buf = closure;
g_string_append_len (buf, (char *)data, data_len);
return CAIRO_STATUS_SUCCESS;
}
static void
to_png_rgb (GString *buf, int w, int h, int byte_stride, guint32 *data)
{
cairo_surface_t *surface;
surface = cairo_image_surface_create_for_data ((guchar *)data,
CAIRO_FORMAT_RGB24, w, h, byte_stride);
cairo_surface_write_to_png_stream (surface, write_png_data, buf);
cairo_surface_destroy (surface);
}
static void
to_png_rgba (GString *buf, int w, int h, int byte_stride, guint32 *data)
{
cairo_surface_t *surface;
surface = cairo_image_surface_create_for_data ((guchar *)data,
CAIRO_FORMAT_ARGB32, w, h, byte_stride);
cairo_surface_write_to_png_stream (surface, write_png_data, buf);
cairo_surface_destroy (surface);
}
struct PngTarget {
GString *buf;
GString *url;
int state;
int save;
};
@@ -107,73 +71,71 @@ write_png_url (void *closure,
struct PngTarget *target = closure;
gsize res, old_len;
old_len = target->buf->len;
g_string_set_size (target->buf,
old_len = target->url->len;
g_string_set_size (target->url,
old_len + (data_len / 3 + 1) * 4 + 4);
res = g_base64_encode_step (data, data_len, FALSE,
target->buf->str + old_len,
target->url->str + old_len,
&target->state, &target->save);
g_string_set_size (target->buf, old_len + res);
g_string_set_size (target->url, old_len + res);
return CAIRO_STATUS_SUCCESS;
}
static void
to_png_url_rgb (GString *buf, int w, int h, int byte_stride, guint32 *data)
static char *
to_png_rgb (int w, int h, int byte_stride, guint32 *data)
{
cairo_surface_t *surface;
struct PngTarget target;
gsize res, old_len;
target.buf = buf;
target.url = g_string_new ("data:image/png;base64,");
target.state = 0;
target.save = 0;
g_string_append (buf, "data:image/png;base64,");
surface = cairo_image_surface_create_for_data ((guchar *)data,
CAIRO_FORMAT_RGB24, w, h, byte_stride);
cairo_surface_write_to_png_stream (surface, write_png_url, &target);
cairo_surface_destroy (surface);
old_len = buf->len;
old_len = target.url->len;
g_string_set_size (buf, old_len + 4);
g_string_set_size (target.url, old_len + 4);
res = g_base64_encode_close (FALSE,
buf->str + old_len,
target.url->str + old_len,
&target.state, &target.save);
g_string_set_size (buf, old_len + res);
g_string_set_size (target.url, old_len + res);
return g_string_free (target.url, FALSE);
}
static void
to_png_url_rgba (GString *buf, int w, int h, int byte_stride, guint32 *data)
static char *
to_png_rgba (int w, int h, int byte_stride, guint32 *data)
{
cairo_surface_t *surface;
struct PngTarget target;
gsize res, old_len;
target.buf = buf;
target.url = g_string_new ("data:image/png;base64,");
target.state = 0;
target.save = 0;
g_string_append (buf, "data:image/png;base64,");
surface = cairo_image_surface_create_for_data ((guchar *)data,
CAIRO_FORMAT_ARGB32, w, h, byte_stride);
cairo_surface_write_to_png_stream (surface, write_png_url, &target);
cairo_surface_destroy (surface);
old_len = buf->len;
old_len = target.url->len;
g_string_set_size (buf, old_len + 4);
g_string_set_size (target.url, old_len + 4);
res = g_base64_encode_close (FALSE,
buf->str + old_len,
target.url->str + old_len,
&target.state, &target.save);
g_string_set_size (buf, old_len + res);
g_string_set_size (target.url, old_len + res);
return g_string_free (target.url, FALSE);
}
#if 0
@@ -211,11 +173,9 @@ to_png_a (int w, int h, int byte_stride, guint8 *data)
struct BroadwayOutput {
GOutputStream *out;
GString *buf;
int error;
guint32 serial;
gboolean proto_v7_plus;
gboolean binary;
};
static void
@@ -252,12 +212,13 @@ broadway_output_send_cmd (BroadwayOutput *output,
}
static void
broadway_output_send_cmd_pre_v7 (BroadwayOutput *output,
const void *buf, gsize count)
broadway_output_sendmsg (BroadwayOutput *output,
const void *buf, gsize count)
{
g_output_stream_write_all (output->out, "\0", 1, NULL, NULL, NULL);
g_output_stream_write_all (output->out, buf, count, NULL, NULL, NULL);
g_output_stream_write_all (output->out, "\xff", 1, NULL, NULL, NULL);
if (!output->proto_v7_plus)
g_output_stream_write_all (output->out, buf, count, NULL, NULL, NULL);
else
broadway_output_send_cmd (output, TRUE, BROADWAY_WS_TEXT, buf, count);
}
void broadway_output_pong (BroadwayOutput *output)
@@ -266,40 +227,42 @@ void broadway_output_pong (BroadwayOutput *output)
broadway_output_send_cmd (output, TRUE, BROADWAY_WS_CNX_PONG, NULL, 0);
}
static void
broadway_output_sendmsg_initiate (BroadwayOutput *output)
{
if (!output->proto_v7_plus)
g_output_stream_write (output->out, "\0", 1, NULL, NULL);
else
{
}
}
int
broadway_output_flush (BroadwayOutput *output)
{
if (output->buf->len == 0)
return TRUE;
if (!output->proto_v7_plus)
broadway_output_send_cmd_pre_v7 (output, output->buf->str, output->buf->len);
else if (output->binary)
broadway_output_send_cmd (output, TRUE, BROADWAY_WS_BINARY,
output->buf->str, output->buf->len);
else
broadway_output_send_cmd (output, TRUE, BROADWAY_WS_TEXT,
output->buf->str, output->buf->len);
g_string_set_size (output->buf, 0);
return !output->error;
{
broadway_output_sendmsg (output, "\xff", 1);
broadway_output_sendmsg (output, "\0", 1);
return !output->error;
}
else /* no need to flush */
return !output->error;
}
BroadwayOutput *
broadway_output_new (GOutputStream *out, guint32 serial,
gboolean proto_v7_plus, gboolean binary)
broadway_output_new(GOutputStream *out, guint32 serial,
gboolean proto_v7_plus)
{
BroadwayOutput *output;
output = g_new0 (BroadwayOutput, 1);
output->out = g_object_ref (out);
output->buf = g_string_new ("");
output->serial = serial;
output->proto_v7_plus = proto_v7_plus;
output->binary = binary;
broadway_output_sendmsg_initiate (output);
return output;
}
@@ -322,97 +285,32 @@ broadway_output_get_next_serial (BroadwayOutput *output)
* Core rendering operations *
************************************************************************/
#define HEADER_LEN (1+6)
static void
append_char (BroadwayOutput *output, char c)
append_uint16 (guint32 v, char *buf, int *p)
{
g_string_append_c (output->buf, c);
base64_uint16 (v, &buf[*p]);
*p += 3;
}
static void
append_bool (BroadwayOutput *output, gboolean val)
append_uint32 (guint32 v, char *buf, int *p)
{
if (output->binary)
g_string_append_c (output->buf, val ? 1: 0);
else
g_string_append_c (output->buf, val ? '1': '0');
base64_uint32 (v, &buf[*p]);
*p += 6;
}
static void
append_flags (BroadwayOutput *output, guint32 val)
static int
write_header(BroadwayOutput *output, char *buf, char op)
{
if (output->binary)
g_string_append_c (output->buf, val);
else
g_string_append_c (output->buf, val + '0');
}
int p;
p = 0;
buf[p++] = op;
append_uint32 (output->serial++, buf, &p);
static void
append_uint16 (BroadwayOutput *output, guint32 v)
{
gsize old_len = output->buf->len;
if (output->binary)
{
guint8 *buf = (guint8 *)output->buf->str + old_len;
g_string_set_size (output->buf, old_len + 2);
buf[0] = (v >> 0) & 0xff;
buf[1] = (v >> 8) & 0xff;
}
else
{
g_string_set_size (output->buf, old_len + 3);
base64_uint16 (v, output->buf->str + old_len);
}
}
static void
append_uint32 (BroadwayOutput *output, guint32 v)
{
gsize old_len = output->buf->len;
if (output->binary)
{
guint8 *buf = (guint8 *)output->buf->str + old_len;
g_string_set_size (output->buf, old_len + 4);
buf[0] = (v >> 0) & 0xff;
buf[1] = (v >> 8) & 0xff;
buf[2] = (v >> 16) & 0xff;
buf[3] = (v >> 24) & 0xff;
}
else
{
g_string_set_size (output->buf, old_len + 6);
base64_uint32 (v, output->buf->str + old_len);
}
}
static void
overwrite_uint32 (BroadwayOutput *output, gsize pos, guint32 v)
{
if (output->binary)
{
guint8 *buf = (guint8 *)output->buf->str + pos;
buf[0] = (v >> 0) & 0xff;
buf[1] = (v >> 8) & 0xff;
buf[2] = (v >> 16) & 0xff;
buf[3] = (v >> 24) & 0xff;
}
else
{
base64_uint32 (v, output->buf->str + pos);
}
}
static void
write_header(BroadwayOutput *output, char op)
{
append_char (output, op);
append_uint32 (output, output->serial++);
return p;
}
void
@@ -420,20 +318,29 @@ broadway_output_copy_rectangles (BroadwayOutput *output, int id,
BroadwayRect *rects, int n_rects,
int dx, int dy)
{
int i;
char *buf;
int len, i, p;
write_header (output, 'b');
append_uint16 (output, id);
append_uint16 (output, n_rects);
len = HEADER_LEN + 3 + 3 + 3*4*n_rects + 3 + 3;
buf = g_malloc (len);
p = write_header (output, buf, 'b');
append_uint16 (id, buf, &p);
append_uint16 (n_rects, buf, &p);
for (i = 0; i < n_rects; i++)
{
append_uint16 (output, rects[i].x);
append_uint16 (output, rects[i].y);
append_uint16 (output, rects[i].width);
append_uint16 (output, rects[i].height);
append_uint16 (rects[i].x, buf, &p);
append_uint16 (rects[i].y, buf, &p);
append_uint16 (rects[i].width, buf, &p);
append_uint16 (rects[i].height, buf, &p);
}
append_uint16 (output, dx);
append_uint16 (output, dy);
append_uint16 (dx, buf, &p);
append_uint16 (dy, buf, &p);
assert (p == len);
broadway_output_sendmsg (output, buf, len);
free (buf);
}
void
@@ -441,18 +348,31 @@ broadway_output_grab_pointer (BroadwayOutput *output,
int id,
gboolean owner_event)
{
write_header (output, 'g');
append_uint16 (output, id);
append_bool (output, owner_event);
char buf[HEADER_LEN + 3 + 1];
int p;
p = write_header (output, buf, 'g');
append_uint16 (id, buf, &p);
buf[p++] = owner_event ? '1': '0';
assert (p == sizeof (buf));
broadway_output_sendmsg (output, buf, sizeof (buf));
}
guint32
broadway_output_ungrab_pointer (BroadwayOutput *output)
{
char buf[HEADER_LEN];
guint32 serial;
int p;
serial = output->serial;
write_header (output, 'u');
p = write_header (output, buf, 'u');
assert (p == sizeof (buf));
broadway_output_sendmsg (output, buf, sizeof (buf));
return serial;
}
@@ -462,34 +382,62 @@ broadway_output_new_surface(BroadwayOutput *output,
int id, int x, int y, int w, int h,
gboolean is_temp)
{
write_header (output, 's');
append_uint16 (output, id);
append_uint16 (output, x);
append_uint16 (output, y);
append_uint16 (output, w);
append_uint16 (output, h);
append_bool (output, is_temp);
char buf[HEADER_LEN + 16];
int p;
p = write_header (output, buf, 's');
append_uint16 (id, buf, &p);
append_uint16 (x, buf, &p);
append_uint16 (y, buf, &p);
append_uint16 (w, buf, &p);
append_uint16 (h, buf, &p);
buf[p++] = is_temp ? '1' : '0';
assert (p == sizeof (buf));
broadway_output_sendmsg (output, buf, sizeof (buf));
}
void
broadway_output_show_surface(BroadwayOutput *output, int id)
{
write_header (output, 'S');
append_uint16 (output, id);
char buf[HEADER_LEN + 3];
int p;
p = write_header (output, buf, 'S');
append_uint16 (id, buf, &p);
assert (p == sizeof (buf));
broadway_output_sendmsg (output, buf, sizeof (buf));
}
void
broadway_output_hide_surface(BroadwayOutput *output, int id)
{
write_header (output, 'H');
append_uint16 (output, id);
char buf[HEADER_LEN + 3];
int p;
p = write_header (output, buf, 'H');
append_uint16 (id, buf, &p);
assert (p == sizeof (buf));
broadway_output_sendmsg (output, buf, sizeof (buf));
}
void
broadway_output_destroy_surface(BroadwayOutput *output, int id)
{
write_header (output, 'd');
append_uint16 (output, id);
char buf[HEADER_LEN + 3];
int p;
p = write_header (output, buf, 'd');
append_uint16 (id, buf, &p);
assert (p == sizeof (buf));
broadway_output_sendmsg (output, buf, sizeof (buf));
}
@@ -503,25 +451,31 @@ broadway_output_move_resize_surface (BroadwayOutput *output,
int w,
int h)
{
char buf[HEADER_LEN+3+1+6+6];
int p;
int val;
if (!has_pos && !has_size)
return;
write_header (output, 'm');
p = write_header (output, buf, 'm');
val = (!!has_pos) | ((!!has_size) << 1);
append_uint16 (output, id);
append_flags (output, val);
append_uint16 (id, buf, &p);
buf[p++] = val + '0';
if (has_pos)
{
append_uint16 (output, x);
append_uint16 (output, y);
append_uint16 (x, buf, &p);
append_uint16 (y, buf, &p);
}
if (has_size)
{
append_uint16 (output, w);
append_uint16 (output, h);
append_uint16 (w, buf, &p);
append_uint16 (h, buf, &p);
}
assert (p <= sizeof (buf));
broadway_output_sendmsg (output, buf, p);
}
void
@@ -529,9 +483,17 @@ broadway_output_set_transient_for (BroadwayOutput *output,
int id,
int parent_id)
{
write_header (output, 'p');
append_uint16 (output, id);
append_uint16 (output, parent_id);
char buf[HEADER_LEN + 6];
int p;
p = write_header (output, buf, 'p');
append_uint16 (id, buf, &p);
append_uint16 (parent_id, buf, &p);
assert (p == sizeof (buf));
broadway_output_sendmsg (output, buf, sizeof (buf));
}
@@ -539,26 +501,32 @@ void
broadway_output_put_rgb (BroadwayOutput *output, int id, int x, int y,
int w, int h, int byte_stride, void *data)
{
gsize size_start, image_start, len;
gsize buf_size;
gsize url_len;
char *url, *buf;
int p;
write_header (output, 'i');
url = to_png_rgb (w, h, byte_stride, (guint32*)data);
url_len = strlen (url);
append_uint16 (output, id);
append_uint16 (output, x);
append_uint16 (output, y);
buf_size = HEADER_LEN + 15 + url_len;
buf = g_malloc (buf_size);
size_start = output->buf->len;
append_uint32 (output, 0);
p = write_header (output, buf, 'i');
image_start = output->buf->len;
if (output->binary)
to_png_rgb (output->buf, w, h, byte_stride, (guint32*)data);
else
to_png_url_rgb (output->buf, w, h, byte_stride, (guint32*)data);
append_uint16 (id, buf, &p);
append_uint16 (x, buf, &p);
append_uint16 (y, buf, &p);
len = output->buf->len - image_start;
append_uint32 (url_len, buf, &p);
overwrite_uint32 (output, size_start, len);
g_assert (p == HEADER_LEN + 15);
strncpy (buf + p, url, url_len);
broadway_output_sendmsg (output, buf, buf_size);
g_free (buf);
free (url);
}
typedef struct {
@@ -789,38 +757,39 @@ broadway_output_put_rgba (BroadwayOutput *output, int id, int x, int y,
int w, int h, int byte_stride, void *data)
{
BroadwayBox *rects;
int i, n_rects;
gsize size_start, image_start, len;
int p, i, n_rects;
rects = rgba_find_rects (data, w, h, byte_stride, &n_rects);
for (i = 0; i < n_rects; i++)
{
gsize url_len, buf_size;
char *buf, *url;
guint8 *subdata;
write_header (output, 'i');
append_uint16 (output, id);
append_uint16 (output, x + rects[i].x1);
append_uint16 (output, y + rects[i].y1);
size_start = output->buf->len;
append_uint32 (output, 0);
image_start = output->buf->len;
subdata = (guint8 *)data + rects[i].x1 * 4 + rects[i].y1 * byte_stride;
if (output->binary)
to_png_rgba (output->buf, rects[i].x2 - rects[i].x1,
rects[i].y2 - rects[i].y1,
byte_stride, (guint32*)subdata);
else
to_png_url_rgba (output->buf, rects[i].x2 - rects[i].x1,
url = to_png_rgba (rects[i].x2 - rects[i].x1,
rects[i].y2 - rects[i].y1,
byte_stride, (guint32*)subdata);
len = output->buf->len - image_start;
url_len = strlen (url);
buf_size = HEADER_LEN + 15 + url_len;
buf = g_malloc (buf_size);
overwrite_uint32 (output, size_start, len);
p = write_header (output, buf, 'i');
append_uint16 (id, buf, &p);
append_uint16 (x + rects[i].x1, buf, &p);
append_uint16 (y + rects[i].y1, buf, &p);
append_uint32 (url_len, buf, &p);
g_assert (p == HEADER_LEN + 15);
strncpy (buf + p, url, url_len);
broadway_output_sendmsg (output, buf, buf_size);
free (url);
g_free (buf);
}
free (rects);
@@ -830,6 +799,13 @@ void
broadway_output_surface_flush (BroadwayOutput *output,
int id)
{
write_header (output, 'f');
append_uint16 (output, id);
char buf[HEADER_LEN + 3];
int p;
p = write_header (output, buf, 'f');
append_uint16 (id, buf, &p);
g_assert (p == sizeof (buf));
broadway_output_sendmsg (output, buf, sizeof (buf));
}

View File

@@ -19,8 +19,7 @@ typedef enum {
BroadwayOutput *broadway_output_new (GOutputStream *out,
guint32 serial,
gboolean proto_v7_plus,
gboolean binary);
gboolean proto_v7_plus);
void broadway_output_free (BroadwayOutput *output);
int broadway_output_flush (BroadwayOutput *output);
int broadway_output_has_error (BroadwayOutput *output);

View File

@@ -725,56 +725,76 @@ function cmdUngrabPointer()
doUngrab();
}
function handleCommands(cmd)
function handleCommands(cmdObj)
{
while (cmd.pos < cmd.length) {
var cmd = cmdObj.data;
var i = cmdObj.pos;
while (i < cmd.length) {
var id, x, y, w, h, q;
var command = cmd.get_char();
lastSerial = cmd.get_32();
var command = cmd[i++];
lastSerial = base64_32(cmd, i);
i = i + 6;
switch (command) {
case 's': // create new surface
id = cmd.get_16();
x = cmd.get_16s();
y = cmd.get_16s();
w = cmd.get_16();
h = cmd.get_16();
var isTemp = cmd.get_bool();
id = base64_16(cmd, i);
i = i + 3;
x = base64_16s(cmd, i);
i = i + 3;
y = base64_16s(cmd, i);
i = i + 3;
w = base64_16(cmd, i);
i = i + 3;
h = base64_16(cmd, i);
i = i + 3;
var isTemp = cmd[i] == '1';
i = i + 1;
cmdCreateSurface(id, x, y, w, h, isTemp);
break;
case 'S': // Show a surface
id = cmd.get_16();
id = base64_16(cmd, i);
i = i + 3;
cmdShowSurface(id);
break;
case 'H': // Hide a surface
id = cmd.get_16();
id = base64_16(cmd, i);
i = i + 3;
cmdHideSurface(id);
break;
case 'p': // Set transient parent
id = cmd.get_16();
var parentId = cmd.get_16();
id = base64_16(cmd, i);
i = i + 3;
var parentId = base64_16(cmd, i);
i = i + 3;
cmdSetTransientFor(id, parentId);
break;
case 'd': // Delete surface
id = cmd.get_16();
id = base64_16(cmd, i);
i = i + 3;
cmdDeleteSurface(id);
break;
case 'm': // Move a surface
id = cmd.get_16();
var ops = cmd.get_flags();
id = base64_16(cmd, i);
i = i + 3;
var ops = cmd.charCodeAt(i++) - 48;
var has_pos = ops & 1;
if (has_pos) {
x = cmd.get_16s();
y = cmd.get_16s();
x = base64_16s(cmd, i);
i = i + 3;
y = base64_16s(cmd, i);
i = i + 3;
}
var has_size = ops & 2;
if (has_size) {
w = cmd.get_16();
h = cmd.get_16();
w = base64_16(cmd, i);
i = i + 3;
h = base64_16(cmd, i);
i = i + 3;
}
cmdMoveResizeSurface(id, has_pos, x, y, has_size, w, h);
break;
@@ -782,50 +802,67 @@ function handleCommands(cmd)
case 'i': // Put image data surface
q = new Object();
q.op = 'i';
q.id = cmd.get_16();
q.x = cmd.get_16();
q.y = cmd.get_16();
var url = cmd.get_image_url ();
q.id = base64_16(cmd, i);
i = i + 3;
q.x = base64_16(cmd, i);
i = i + 3;
q.y = base64_16(cmd, i);
i = i + 3;
var size = base64_32(cmd, i);
i = i + 6;
var url = cmd.slice(i, i + size);
i = i + size;
q.img = new Image();
q.img.src = url;
surfaces[q.id].drawQueue.push(q);
if (!q.img.complete) {
q.img.onload = function() { cmd.free_image_url (url); handleOutstanding(); };
cmdObj.pos = i;
q.img.onload = function() { handleOutstanding(); };
return false;
}
cmd.free_image_url (url);
break;
case 'b': // Copy rects
q = new Object();
q.op = 'b';
q.id = cmd.get_16();
var nrects = cmd.get_16();
q.id = base64_16(cmd, i);
i = i + 3;
var nrects = base64_16(cmd, i);
i = i + 3;
q.rects = [];
for (var r = 0; r < nrects; r++) {
var rect = new Object();
rect.x = cmd.get_16();
rect.y = cmd.get_16();
rect.w = cmd.get_16();
rect.h = cmd.get_16();
rect.x = base64_16(cmd, i);
i = i + 3;
rect.y = base64_16(cmd, i);
i = i + 3;
rect.w = base64_16(cmd, i);
i = i + 3;
rect.h = base64_16(cmd, i);
i = i + 3;
q.rects.push (rect);
}
q.dx = cmd.get_16s();
q.dy = cmd.get_16s();
q.dx = base64_16s(cmd, i);
i = i + 3;
q.dy = base64_16s(cmd, i);
i = i + 3;
surfaces[q.id].drawQueue.push(q);
break;
case 'f': // Flush surface
id = cmd.get_16();
id = base64_16(cmd, i);
i = i + 3;
cmdFlushSurface(id);
break;
case 'g': // Grab
id = cmd.get_16();
var ownerEvents = cmd.get_bool ();
id = base64_16(cmd, i);
i = i + 3;
var ownerEvents = cmd[i++] == '1';
cmdGrabPointer(id, ownerEvents);
break;
@@ -851,103 +888,13 @@ function handleOutstanding()
}
}
function TextCommands(message) {
this.data = message;
this.length = message.length;
this.pos = 0;
}
TextCommands.prototype.get_char = function() {
return this.data[this.pos++];
};
TextCommands.prototype.get_bool = function() {
return this.get_char() == '1';
};
TextCommands.prototype.get_flags = function() {
return this.get_char() - 48;
}
TextCommands.prototype.get_16 = function() {
var n = base64_16(this.data, this.pos);
this.pos = this.pos + 3;
return n;
};
TextCommands.prototype.get_16s = function() {
var n = base64_16s(this.data, this.pos);
this.pos = this.pos + 3;
return n;
};
TextCommands.prototype.get_32 = function() {
var n = base64_32(this.data, this.pos);
this.pos = this.pos + 6;
return n;
};
TextCommands.prototype.get_image_url = function() {
var size = this.get_32();
var url = this.data.slice(this.pos, this.pos + size);
this.pos = this.pos + size;
return url;
};
TextCommands.prototype.free_image_url = function(url) {
};
function BinCommands(message) {
this.arraybuffer = message;
this.u8 = new Uint8Array(message);
this.length = this.u8.length;
this.pos = 0;
}
BinCommands.prototype.get_char = function() {
return String.fromCharCode(this.u8[this.pos++]);
};
BinCommands.prototype.get_bool = function() {
return this.u8[this.pos++] != 0;
};
BinCommands.prototype.get_flags = function() {
return this.u8[this.pos++];
}
BinCommands.prototype.get_16 = function() {
var v =
this.u8[this.pos] +
(this.u8[this.pos+1] << 8);
this.pos = this.pos + 2;
return v;
};
BinCommands.prototype.get_16s = function() {
var v = this.get_16 ();
if (v > 32767)
return v - 65536;
else
return v;
};
BinCommands.prototype.get_32 = function() {
var v =
this.u8[this.pos] +
(this.u8[this.pos+1] << 8) +
(this.u8[this.pos+2] << 16) +
(this.u8[this.pos+3] << 24);
this.pos = this.pos + 4;
return v;
};
BinCommands.prototype.get_image_url = function() {
var size = this.get_32();
var png_blob = new Blob ([this.arraybuffer.slice (this.pos, this.pos + size)], {type:"image/png"});
var url = URL.createObjectURL(png_blob, {oneTimeOnly: true});
this.pos = this.pos + size;
return url;
};
BinCommands.prototype.free_image_url = function(url) {
URL.revokeObjectURL(url);
};
function handleMessage(message)
{
var cmd;
if (message instanceof ArrayBuffer)
cmd = new BinCommands(message);
else
cmd = new TextCommands(message);
outstandingCommands.push(cmd);
var cmdObj = {};
cmdObj.data = message;
cmdObj.pos = 0;
outstandingCommands.push(cmdObj);
if (outstandingCommands.length == 1) {
handleOutstanding();
}
@@ -2812,18 +2759,6 @@ function setupDocument(document)
}
}
function newWS(loc) {
var ws = null;
if ("WebSocket" in window) {
ws = new WebSocket(loc, "broadway");
} else if ("MozWebSocket" in window) { // Firefox 6
ws = new MozWebSocket(loc);
} else {
alert("WebSocket not supported, broadway will not work!");
}
return ws;
}
function connect()
{
var url = window.location.toString();
@@ -2836,39 +2771,41 @@ function connect()
var loc = window.location.toString().replace("http:", "ws:");
loc = loc.substr(0, loc.lastIndexOf('/')) + "/socket";
var ws = null;
var supports_binary = newWS (loc + "-test").binaryType == "blob";
if (supports_binary) {
ws = newWS (loc + "-bin");
ws.binaryType = "arraybuffer";
if ("WebSocket" in window) {
ws = new WebSocket(loc, "broadway");
} else if ("MozWebSocket" in window) { // Firefox 6
ws = new MozWebSocket(loc);
} else {
ws = newWS (loc);
alert("WebSocket not supported, input will not work!");
return;
}
ws.onopen = function() {
inputSocket = ws;
var w, h;
if (useToplevelWindows) {
w = window.screen.width;
h = window.screen.height;
} else {
w = window.innerWidth;
h = window.innerHeight;
window.onresize = function(ev) {
var w, h;
ws.onopen = function() {
inputSocket = ws;
var w, h;
if (useToplevelWindows) {
w = window.screen.width;
h = window.screen.height;
} else {
w = window.innerWidth;
h = window.innerHeight;
sendInput ("d", [w, h]);
};
}
sendInput ("d", [w, h]);
};
ws.onclose = function() {
inputSocket = null;
};
ws.onmessage = function(event) {
handleMessage(event.data);
};
window.onresize = function(ev) {
var w, h;
w = window.innerWidth;
h = window.innerHeight;
sendInput ("d", [w, h]);
};
}
sendInput ("d", [w, h]);
};
ws.onclose = function() {
inputSocket = null;
};
ws.onmessage = function(event) {
handleMessage(event.data);
};
setupDocument(document);
window.onunload = function (ev) {

View File

@@ -130,7 +130,7 @@ typedef struct HttpRequest {
GString *request;
} HttpRequest;
static void start_output (HttpRequest *request, gboolean proto_v7_plus, gboolean binary);
static void start_output (HttpRequest *request, gboolean proto_v7_plus);
static void
http_request_free (HttpRequest *request)
@@ -149,7 +149,6 @@ struct BroadwayInput {
gboolean seen_time;
gint64 time_base;
gboolean proto_v7_plus;
gboolean binary;
};
static void
@@ -692,7 +691,7 @@ generate_handshake_response_wsietf_v7 (const gchar *key)
}
static void
start_input (HttpRequest *request, gboolean binary)
start_input (HttpRequest *request)
{
char **lines;
char *p;
@@ -868,7 +867,6 @@ start_input (HttpRequest *request, gboolean binary)
input->display = request->display;
input->connection = g_object_ref (request->connection);
input->proto_v7_plus = proto_v7_plus;
input->binary = binary;
data_buffer = g_buffered_input_stream_peek_buffer (G_BUFFERED_INPUT_STREAM (request->data), &data_buffer_size);
input->buffer = g_byte_array_sized_new (data_buffer_size);
@@ -876,7 +874,7 @@ start_input (HttpRequest *request, gboolean binary)
broadway_display->input = input;
start_output (request, proto_v7_plus, binary);
start_output (request, proto_v7_plus);
/* This will free and close the data input stream, but we got all the buffered content already */
http_request_free (request);
@@ -894,7 +892,7 @@ start_input (HttpRequest *request, gboolean binary)
}
static void
start_output (HttpRequest *request, gboolean proto_v7_plus, gboolean binary)
start_output (HttpRequest *request, gboolean proto_v7_plus)
{
GSocket *socket;
GdkBroadwayDisplay *broadway_display;
@@ -914,7 +912,7 @@ start_output (HttpRequest *request, gboolean proto_v7_plus, gboolean binary)
broadway_display->output =
broadway_output_new (g_io_stream_get_output_stream (G_IO_STREAM (request->connection)),
broadway_display->saved_serial, proto_v7_plus, binary);
broadway_display->saved_serial, proto_v7_plus);
_gdk_broadway_resync_windows ();
@@ -987,9 +985,7 @@ got_request (HttpRequest *request)
else if (strcmp (escaped, "/broadway.js") == 0)
send_data (request, "text/javascript", broadway_js, G_N_ELEMENTS(broadway_js) - 1);
else if (strcmp (escaped, "/socket") == 0)
start_input (request, FALSE);
else if (strcmp (escaped, "/socket-bin") == 0)
start_input (request, TRUE);
start_input (request);
else
send_error (request, 404, "File not found");

View File

@@ -274,6 +274,8 @@ gdk_pre_parse_libgtk_only (void)
_gdk_rendering_mode = GDK_RENDERING_MODE_RECORDING;
}
g_type_init ();
/* Do any setup particular to the windowing system */
gdk_display_manager_get ();
}

View File

@@ -24,8 +24,6 @@
#include "config.h"
#include "gdkdisplay.h"
#include "gdkmain.h"
#include "gdkwindow.h"
/**
* gdk_pointer_ungrab:

View File

@@ -584,11 +584,12 @@ gdk_keymap_translate_keyboard_state (GdkKeymap *keymap,
/**
* gdk_keymap_add_virtual_modifiers:
* @keymap: a #GdkKeymap
* @state: (inout): pointer to the modifier mask to change
* @state: (out): pointer to the modifier mask to change
*
* Maps the non-virtual modifiers (i.e Mod2, Mod3, ...) which are set
* in @state to the virtual modifiers (i.e. Super, Hyper and Meta) and
* set the corresponding bits in @state.
* Adds virtual modifiers (i.e. Super, Hyper and Meta) which correspond
* to the real modifiers (i.e Mod2, Mod3, ...) in @modifiers.
* are set in @state to their non-virtual counterparts (i.e. Mod2,
* Mod3,...) and set the corresponding bits in @state.
*
* GDK already does this before delivering key events, but for
* compatibility reasons, it only sets the first virtual modifier
@@ -611,7 +612,7 @@ gdk_keymap_add_virtual_modifiers (GdkKeymap *keymap,
/**
* gdk_keymap_map_virtual_modifiers:
* @keymap: a #GdkKeymap
* @state: (inout): pointer to the modifier state to map
* @state: (out): pointer to the modifier state to map
*
* Maps the virtual modifiers (i.e. Super, Hyper and Meta) which
* are set in @state to their non-virtual counterparts (i.e. Mod2,

View File

@@ -24,7 +24,6 @@
#include "config.h"
#include "gdkkeys.h"
#include "gdktypes.h"

View File

@@ -21,7 +21,6 @@
#include "config.h"
#include "gdkinternals.h"
#include "gdkscreenprivate.h"
#include "gdkrectangle.h"
#include "gdkwindow.h"

View File

@@ -29,7 +29,7 @@ G_BEGIN_DECLS
/**
* SECTION:gdktestutils
* SECTION:gdktesting
* @Short_description: Test utilities
* @Title: Testing
*

View File

@@ -90,16 +90,6 @@
*/
#define GDK_VERSION_3_6 (G_ENCODE_VERSION (3, 6))
/**
* GDK_VERSION_3_8:
*
* A macro that evaluates to the 3.8 version of GDK, in a format
* that can be used by the C pre-processor.
*
* Since: 3.8
*/
#define GDK_VERSION_3_8 (G_ENCODE_VERSION (3, 8))
/* evaluates to the current stable version; for development cycles,
* this means the next stable target
@@ -227,18 +217,4 @@
# define GDK_AVAILABLE_IN_3_6
#endif
#if GDK_VERSION_MIN_REQUIRED >= GDK_VERSION_3_8
# define GDK_DEPRECATED_IN_3_8 GDK_DEPRECATED
# define GDK_DEPRECATED_IN_3_8_FOR(f) GDK_DEPRECATED_FOR(f)
#else
# define GDK_DEPRECATED_IN_3_8
# define GDK_DEPRECATED_IN_3_8_FOR(f)
#endif
#if GDK_VERSION_MAX_ALLOWED < GDK_VERSION_3_8
# define GDK_AVAILABLE_IN_3_8 GDK_UNAVAILABLE(3, 8)
#else
# define GDK_AVAILABLE_IN_3_8
#endif
#endif /* __GDK_VERSION_MACROS_H__ */

View File

@@ -65,6 +65,25 @@
* <firstterm>composited</firstterm> window it is the responsibility of the
* application to render the window contents at the right spot.
* </para>
* <example id="composited-window-example">
* <title>Composited windows</title>
* <programlisting>
* <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="text" href="../../../../examples/gdk/composited-window-example.c"><xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback></xi:include>
* </programlisting></example>
* <para>
* In the example <xref linkend="composited-window-example"/>, a button is
* placed inside of an event box inside of a window. The event box is set as
* composited and therefore is no longer automatically drawn to the screen.
*
* When the contents of the event box change, an expose event is generated on
* its parent window (which, in this case, belongs to the toplevel #GtkWindow).
* The expose handler for this widget is responsible for merging the changes
* back on the screen in the way that it wishes.
*
* In our case, we merge the contents with a 50% transparency. We also set the
* background colour of the window to red. The effect is that the background
* shows through the button.
* </para>
* </refsect2>
* <refsect2 id="OFFSCREEN-WINDOWS">
* <title>Offscreen Windows</title>
@@ -93,7 +112,7 @@
* be it a toplevel window or a child window. In this setup the
* GdkWindow (and other GdkDrawables) were platform independent classes,
* and the actual platform specific implementation was in a delegate
* object available as "impl" in the window object.
* object availible as "impl" in the window object.
*
* With the addition of client side windows and offscreen windows this
* changes a bit. The application-visible GdkWindow object behaves as
@@ -668,13 +687,6 @@ gdk_window_has_no_impl (GdkWindow *window)
return window->impl_window != window;
}
static gboolean
gdk_window_has_alpha (GdkWindow *window)
{
return !gdk_window_has_impl (window) &&
window->has_alpha_background;
}
static void
remove_layered_child_area (GdkWindow *window,
cairo_region_t *region)
@@ -702,7 +714,7 @@ remove_layered_child_area (GdkWindow *window,
continue;
/* Only non-impl children with alpha add to the layered region */
if (!gdk_window_has_alpha (child))
if (!child->has_alpha_background && gdk_window_has_impl (child))
continue;
r.x = child->x;
@@ -804,7 +816,7 @@ remove_child_area (GdkWindow *window,
}
}
if (gdk_window_has_alpha (child))
if (child->has_alpha_background)
{
if (layered_region != NULL)
cairo_region_union (layered_region, child_region);
@@ -1370,11 +1382,6 @@ gdk_window_new (GdkWindow *parent,
return NULL;
}
if (attributes_mask & GDK_WA_VISUAL)
{
g_return_val_if_fail (gdk_visual_get_screen (attributes->visual) == screen, NULL);
}
display = gdk_screen_get_display (screen);
window = _gdk_display_create_window (display);
@@ -2996,7 +3003,8 @@ gdk_window_begin_paint_region (GdkWindow *window,
by being drawn in back to front order. However, if implicit paints are not used, for
instance if it was flushed due to a non-double-buffered paint in the middle of the
expose we need to copy in the existing data here. */
if (gdk_window_has_alpha (window) &&
if (!gdk_window_has_impl (window) &&
window->has_alpha_background &&
(!implicit_paint ||
(implicit_paint && implicit_paint->flushed != NULL && !cairo_region_is_empty (implicit_paint->flushed))))
{
@@ -6167,7 +6175,7 @@ gdk_window_move_resize_internal (GdkWindow *window,
* Everything in the old and new regions that is not copied must be
* invalidated (including children) as this is newly exposed
*/
if (gdk_window_has_alpha (window))
if (window->has_alpha_background)
copy_area = cairo_region_create (); /* Copy nothing for alpha windows */
else
copy_area = cairo_region_copy (new_region);
@@ -6391,7 +6399,7 @@ gdk_window_scroll (GdkWindow *window,
impl_window = gdk_window_get_impl_window (window);
/* Calculate the area that can be gotten by copying the old area */
if (gdk_window_has_alpha (window))
if (window->has_alpha_background)
copy_area = cairo_region_create (); /* Copy nothing for alpha windows */
else
copy_area = cairo_region_copy (window->clip_region);
@@ -6479,7 +6487,7 @@ gdk_window_move_region (GdkWindow *window,
impl_window = gdk_window_get_impl_window (window);
/* compute source regions */
if (gdk_window_has_alpha (window))
if (window->has_alpha_background)
copy_area = cairo_region_create (); /* Copy nothing for alpha windows */
else
copy_area = cairo_region_copy (region);

View File

@@ -141,38 +141,6 @@
return inMove;
}
-(void)checkSendEnterNotify
{
GdkWindow *window = [[self contentView] gdkWindow];
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
/* When a new window has been created, and the mouse
* is in the window area, we will not receive an NSMouseEntered
* event. Therefore, we synthesize an enter notify event manually.
*/
if (!initialPositionKnown)
{
initialPositionKnown = YES;
if (NSPointInRect ([NSEvent mouseLocation], [self frame]))
{
NSEvent *event;
event = [NSEvent enterExitEventWithType: NSMouseEntered
location: [self mouseLocationOutsideOfEventStream]
modifierFlags: 0
timestamp: [[NSApp currentEvent] timestamp]
windowNumber: [impl->toplevel windowNumber]
context: NULL
eventNumber: 0
trackingNumber: [impl->view trackingRect]
userData: nil];
[NSApp postEvent:event atStart:NO];
}
}
}
-(void)windowDidMove:(NSNotification *)aNotification
{
GdkWindow *window = [[self contentView] gdkWindow];
@@ -189,8 +157,6 @@
event->configure.height = window->height;
_gdk_event_queue_append (gdk_display_get_default (), event);
[self checkSendEnterNotify];
}
-(void)windowDidResize:(NSNotification *)aNotification
@@ -220,8 +186,6 @@
event->configure.height = window->height;
_gdk_event_queue_append (gdk_display_get_default (), event);
[self checkSendEnterNotify];
}
-(id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag screen:(NSScreen *)screen
@@ -319,8 +283,6 @@
[impl->toplevel orderFront:nil];
inShowOrHide = NO;
[self checkSendEnterNotify];
}
- (void)hide
@@ -331,8 +293,6 @@
inShowOrHide = YES;
[impl->toplevel orderOut:nil];
inShowOrHide = NO;
initialPositionKnown = NO;
}
- (BOOL)trackManualMove

View File

@@ -23,7 +23,6 @@
@interface GdkQuartzNSWindow : NSWindow {
BOOL inMove;
BOOL inShowOrHide;
BOOL initialPositionKnown;
/* Manually triggered move/resize (not by the window manager) */
BOOL inManualMove;

View File

@@ -81,25 +81,6 @@
if (NSEqualRects (rect, NSZeroRect))
return;
if (!GDK_WINDOW_IS_MAPPED (gdk_window))
{
/* If the window is not yet mapped, clip_region_with_children
* will be empty causing the usual code below to draw nothing.
* To not see garbage on the screen, we draw an aesthetic color
* here. The garbage would be visible if any widget enabled
* the NSView's CALayer in order to add sublayers for custom
* native rendering.
*/
[NSGraphicsContext saveGraphicsState];
[[NSColor windowBackgroundColor] setFill];
[NSBezierPath fillRect:rect];
[NSGraphicsContext restoreGraphicsState];
return;
}
/* Clear our own bookkeeping of regions that need display */
if (impl->needs_display_region)
{
@@ -167,6 +148,15 @@
owner:self
userData:nil
assumeInside:NO];
if (NSPointInRect ([[self window] convertScreenToBase:[NSEvent mouseLocation]], rect))
{
/* When a new window (and thus view) has been created, and the mouse
* is in the window area, we will not receive an NSMouseEntered
* event. Therefore, we synthesize an enter notify event manually.
*/
_gdk_quartz_events_send_enter_notify_event (gdk_window);
}
}
-(void)viewDidMoveToWindow

View File

@@ -635,6 +635,21 @@ gdk_event_check (GSource *source)
gdk_threads_enter ();
/* Refresh the autorelease pool if we're at the base CFRunLoop level
* (indicated by current_loop_level) and the base g_main_loop level
* (indicated by g_main_depth()). Messing with the autorelease pool at
* any level of nesting can cause access to deallocated memory because
* autorelease_pool is static and releasing a pool will cause all pools
* allocated inside of it to be released as well.
*/
if (current_loop_level == 0 && g_main_depth() == 0)
{
if (autorelease_pool)
[autorelease_pool drain];
autorelease_pool = [[NSAutoreleasePool alloc] init];
}
retval = (_gdk_event_queue_find_first (_gdk_display) != NULL ||
_gdk_quartz_event_loop_check_pending ());
@@ -652,21 +667,6 @@ gdk_event_dispatch (GSource *source,
gdk_threads_enter ();
/* Refresh the autorelease pool if we're at the base CFRunLoop level
* (indicated by current_loop_level) and the base g_main_loop level
* (indicated by g_main_depth()). Messing with the autorelease pool at
* any level of nesting can cause access to deallocated memory because
* autorelease_pool is static and releasing a pool will cause all pools
* allocated inside of it to be released as well.
*/
if (current_loop_level == 0 && g_main_depth() == 0)
{
if (autorelease_pool)
[autorelease_pool drain];
autorelease_pool = [[NSAutoreleasePool alloc] init];
}
_gdk_quartz_display_queue_events (_gdk_display);
event = _gdk_event_unqueue (_gdk_display);
@@ -703,10 +703,6 @@ poll_func (GPollFD *ufds,
NSDate *limit_date;
gint n_ready;
static GPollFD *last_ufds;
last_ufds = ufds;
n_ready = select_thread_start_poll (ufds, nfds, timeout_);
if (n_ready > 0)
timeout_ = 0;
@@ -725,16 +721,7 @@ poll_func (GPollFD *ufds,
dequeue: YES];
getting_events--;
/* We check if last_ufds did not change since the time this function was
* called. It is possible that a recursive main loop (and thus recursive
* invocation of this poll function) is triggered while in
* nextEventMatchingMask:. If during that time new fds are added,
* the cached fds array might be replaced in g_main_context_iterate().
* So, we should avoid accessing the old fd array (still pointed at by
* ufds) here in that case, since it might have been freed. We avoid this
* by not calling the collect stage.
*/
if (last_ufds == ufds && n_ready < 0)
if (n_ready < 0)
n_ready = select_thread_collect_poll (ufds, nfds);
if (event &&

View File

@@ -58,62 +58,10 @@ static GdkWindow *find_toplevel_under_pointer (GdkDisplay *display,
gint *y);
static void
gdk_quartz_ns_notification_callback (CFNotificationCenterRef center,
void *observer,
CFStringRef name,
const void *object,
CFDictionaryRef userInfo)
{
GdkEvent new_event;
new_event.type = GDK_SETTING;
new_event.setting.window = gdk_screen_get_root_window (_gdk_screen);
new_event.setting.send_event = FALSE;
new_event.setting.action = GDK_SETTING_ACTION_CHANGED;
new_event.setting.name = NULL;
/* Translate name */
if (CFStringCompare (name,
CFSTR("AppleNoRedisplayAppearancePreferenceChanged"),
0) == kCFCompareEqualTo)
new_event.setting.name = "gtk-primary-button-warps-slider";
if (!new_event.setting.name)
return;
gdk_event_put (&new_event);
}
static void
gdk_quartz_events_init_notifications (void)
{
static gboolean notifications_initialized = FALSE;
if (notifications_initialized)
return;
notifications_initialized = TRUE;
/* Initialize any handlers for notifications we want to push to GTK
* through GdkEventSettings.
*/
/* This is an undocumented *distributed* notification to listen for changes
* in scrollbar jump behavior. It is used by LibreOffice and WebKit as well.
*/
CFNotificationCenterAddObserver (CFNotificationCenterGetDistributedCenter (),
NULL,
&gdk_quartz_ns_notification_callback,
CFSTR ("AppleNoRedisplayAppearancePreferenceChanged"),
NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);
}
void
_gdk_quartz_events_init (void)
{
_gdk_quartz_event_loop_init ();
gdk_quartz_events_init_notifications ();
current_keyboard_window = g_object_ref (_gdk_root);
}
@@ -401,89 +349,34 @@ get_window_point_from_screen_point (GdkWindow *window,
*y = window->height - point.y;
}
static gboolean
is_mouse_button_press_event (NSEventType type)
{
switch (type)
{
case NSLeftMouseDown:
case NSRightMouseDown:
case NSOtherMouseDown:
return TRUE;
}
return FALSE;
}
static GdkWindow *
get_toplevel_from_ns_event (NSEvent *nsevent,
NSPoint *screen_point,
gint *x,
gint *y)
{
GdkWindow *toplevel = NULL;
GdkWindow *toplevel;
if ([nsevent window])
{
GdkQuartzView *view;
NSPoint point, view_point;
NSRect view_frame;
NSPoint point;
view = (GdkQuartzView *)[[nsevent window] contentView];
toplevel = [view gdkWindow];
point = [nsevent locationInWindow];
view_point = [view convertPoint:point fromView:nil];
view_frame = [view frame];
*screen_point = [[nsevent window] convertBaseToScreen:point];
/* NSEvents come in with a window set, but with window coordinates
* out of window bounds. For e.g. moved events this is fine, we use
* this information to properly handle enter/leave notify and motion
* events. For mouse button press/release, we want to avoid forwarding
* these events however, because the window they relate to is not the
* window set in the event. This situation appears to occur when button
* presses come in just before (or just after?) a window is resized and
* also when a button press occurs on the OS X window titlebar.
*
* By setting toplevel to NULL, we do another attempt to get the right
* toplevel window below.
*/
if (is_mouse_button_press_event ([nsevent type]) &&
(view_point.x < view_frame.origin.x ||
view_point.x >= view_frame.origin.x + view_frame.size.width ||
view_point.y < view_frame.origin.y ||
view_point.y >= view_frame.origin.y + view_frame.size.height))
{
toplevel = NULL;
/* This is a hack for button presses to break all grabs. E.g. if
* a menu is open and one clicks on the title bar (or anywhere
* out of window bounds), we really want to pop down the menu (by
* breaking the grabs) before OS X handles the action of the title
* bar button.
*
* Because we cannot ingest this event into GDK, we have to do it
* here, not very nice.
*/
_gdk_quartz_events_break_all_grabs (get_time_from_ns_event (nsevent));
}
else
{
*screen_point = [[nsevent window] convertBaseToScreen:point];
*x = point.x;
*y = toplevel->height - point.y;
}
*x = point.x;
*y = toplevel->height - point.y;
}
if (!toplevel)
else
{
/* Fallback used when no NSWindow set. This happens e.g. when
* we allow motion events without a window set in gdk_event_translate()
* that occur immediately after the main menu bar was clicked/used.
* This fallback will not return coordinates contained in a window's
* titlebar.
*/
*screen_point = [NSEvent mouseLocation];
toplevel = find_toplevel_under_pointer (_gdk_display,
@@ -530,7 +423,7 @@ generate_motion_event (GdkWindow *window)
event->any.type = GDK_MOTION_NOTIFY;
event->motion.window = window;
event->motion.time = get_time_from_ns_event ([NSApp currentEvent]);
event->motion.time = GDK_CURRENT_TIME;
event->motion.x = x;
event->motion.y = y;
event->motion.x_root = x_root;
@@ -589,6 +482,39 @@ _gdk_quartz_events_update_focus_window (GdkWindow *window,
}
}
void
_gdk_quartz_events_send_enter_notify_event (GdkWindow *window)
{
NSPoint screen_point;
GdkEvent *event;
gint x, y, x_root, y_root;
event = gdk_event_new (GDK_ENTER_NOTIFY);
event->any.window = NULL;
event->any.send_event = FALSE;
screen_point = [NSEvent mouseLocation];
_gdk_quartz_window_nspoint_to_gdk_xy (screen_point, &x_root, &y_root);
get_window_point_from_screen_point (window, screen_point, &x, &y);
event->crossing.window = window;
event->crossing.subwindow = NULL;
event->crossing.time = GDK_CURRENT_TIME;
event->crossing.x = x;
event->crossing.y = y;
event->crossing.x_root = x_root;
event->crossing.y_root = y_root;
event->crossing.mode = GDK_CROSSING_NORMAL;
event->crossing.detail = GDK_NOTIFY_ANCESTOR;
event->crossing.state = _gdk_quartz_events_get_current_keyboard_modifiers () |
_gdk_quartz_events_get_current_mouse_modifiers ();
gdk_event_set_device (event, _gdk_display->core_pointer);
append_event (event, TRUE);
}
void
_gdk_quartz_events_send_map_event (GdkWindow *window)
{
@@ -622,18 +548,6 @@ find_toplevel_under_pointer (GdkDisplay *display,
if (toplevel && WINDOW_IS_TOPLEVEL (toplevel))
get_window_point_from_screen_point (toplevel, screen_point, x, y);
if (toplevel)
{
/* If the coordinates are out of window bounds, this toplevel is not
* under the pointer and we thus return NULL. This can occur when
* toplevel under pointer has not yet been updated due to a very recent
* window resize. Alternatively, we should no longer be relying on
* the toplevel_under_pointer value which is maintained in gdkwindow.c.
*/
if (*x < 0 || *y < 0 || *x >= toplevel->width || *y >= toplevel->height)
return NULL;
}
return toplevel;
}
@@ -806,8 +720,6 @@ find_window_for_ns_event (NSEvent *nsevent,
view = (GdkQuartzView *)[[nsevent window] contentView];
toplevel = get_toplevel_from_ns_event (nsevent, &screen_point, x, y);
if (!toplevel)
return NULL;
_gdk_quartz_window_nspoint_to_gdk_xy (screen_point, x_root, y_root);
event_type = [nsevent type];
@@ -1121,9 +1033,8 @@ synthesize_crossing_event (GdkWindow *window,
switch ([nsevent type])
{
case NSMouseEntered:
/* Enter events are considered always to be from another toplevel
* window, this shouldn't negatively affect any app or gtk code,
* and is the only way to make GtkMenu work. EEK EEK EEK.
/* Enter events are considered always to be from the root window as we
* can't know for sure from what window we enter.
*/
if (!(window->event_mask & GDK_ENTER_NOTIFY_MASK))
return FALSE;
@@ -1133,11 +1044,14 @@ synthesize_crossing_event (GdkWindow *window,
x_root, y_root,
GDK_ENTER_NOTIFY,
GDK_CROSSING_NORMAL,
GDK_NOTIFY_NONLINEAR);
GDK_NOTIFY_ANCESTOR);
return TRUE;
case NSMouseExited:
/* See above */
/* Exited always is to the root window as far as we are concerned,
* since there is no way to reliably get information about what new
* window is entered when exiting one.
*/
if (!(window->event_mask & GDK_LEAVE_NOTIFY_MASK))
return FALSE;
@@ -1146,7 +1060,7 @@ synthesize_crossing_event (GdkWindow *window,
x_root, y_root,
GDK_LEAVE_NOTIFY,
GDK_CROSSING_NORMAL,
GDK_NOTIFY_NONLINEAR);
GDK_NOTIFY_ANCESTOR);
return TRUE;
default:
@@ -1343,9 +1257,9 @@ gdk_event_translate (GdkEvent *event,
}
/* Also when in a manual resize, we ignore events so that these are
* pushed to GdkQuartzNSWindow's sendEvent handler.
* pushed to GdkQuartzWindow's sendEvent handler.
*/
if ([(GdkQuartzNSWindow *)nswindow isInManualResize])
if ([(GdkQuartzWindow *)nswindow isInManualResize])
return FALSE;
/* Find the right GDK window to send the event to, taking grabs and
@@ -1472,9 +1386,7 @@ gdk_event_translate (GdkEvent *event,
if (dx != 0.0 || dy != 0.0)
{
#ifdef AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
if (gdk_quartz_osx_version() >= GDK_OSX_LION &&
[nsevent hasPreciseScrollingDeltas])
if ([nsevent hasPreciseScrollingDeltas])
{
GdkEvent *emulated_event;
@@ -1486,7 +1398,6 @@ gdk_event_translate (GdkEvent *event,
append_event (emulated_event, TRUE);
}
else
#endif
fill_scroll_event (window, event, nsevent,
x, y, x_root, y_root,
dx, dy, direction);
@@ -1637,19 +1548,6 @@ _gdk_quartz_screen_get_setting (GdkScreen *screen,
GDK_QUARTZ_RELEASE_POOL;
return TRUE;
}
else if (strcmp (name, "gtk-primary-button-warps-slider") == 0)
{
GDK_QUARTZ_ALLOC_POOL;
BOOL setting = [[NSUserDefaults standardUserDefaults] boolForKey:@"AppleScrollerPagingBehavior"];
/* If the Apple property is YES, it means "warp" */
g_value_set_boolean (value, setting == YES);
GDK_QUARTZ_RELEASE_POOL;
return TRUE;
}

View File

@@ -28,14 +28,9 @@ GdkWindow *_gdk_root = NULL;
GdkOSXVersion
gdk_quartz_osx_version (void)
{
static gint32 minor = GDK_OSX_UNSUPPORTED;
if (minor == GDK_OSX_UNSUPPORTED)
{
OSErr err = Gestalt (gestaltSystemVersionMinor, (SInt32*)&minor);
g_return_val_if_fail (err == noErr, GDK_OSX_UNSUPPORTED);
}
gint minor;
OSErr err = Gestalt (gestaltSystemVersionMinor, &minor);
g_return_val_if_fail (err == noErr, GDK_OSX_UNSUPPORTED);
if (minor < GDK_OSX_MIN)
return GDK_OSX_UNSUPPORTED;

View File

@@ -176,7 +176,7 @@ const static struct {
{ 67, GDK_KEY_asterisk, GDK_KEY_KP_Multiply },
{ 69, GDK_KEY_plus, GDK_KEY_KP_Add },
{ 75, GDK_KEY_slash, GDK_KEY_KP_Divide },
{ 76, GDK_KEY_Return, GDK_KEY_KP_Enter },
{ 76, 0x01000003, GDK_KEY_KP_Enter },
{ 78, GDK_KEY_minus, GDK_KEY_KP_Subtract },
{ 81, GDK_KEY_equal, GDK_KEY_KP_Equal },
{ 82, GDK_KEY_0, GDK_KEY_KP_0 },

View File

@@ -64,6 +64,7 @@ void _gdk_quartz_events_send_map_event (GdkWindow *window);
GdkModifierType _gdk_quartz_events_get_current_keyboard_modifiers (void);
GdkModifierType _gdk_quartz_events_get_current_mouse_modifiers (void);
void _gdk_quartz_events_send_enter_notify_event (GdkWindow *window);
void _gdk_quartz_events_break_all_grabs (guint32 time);
/* Event loop */

View File

@@ -48,8 +48,7 @@ typedef enum
GDK_OSX_LEOPARD = 5,
GDK_OSX_SNOW_LEOPARD = 6,
GDK_OSX_LION = 7,
GDK_OSX_MOUNTAIN_LION = 8,
GDK_OSX_CURRENT = 8,
GDK_OSX_CURRENT = 7,
GDK_OSX_NEW = 99
} GdkOSXVersion;

View File

@@ -2315,31 +2315,28 @@ gdk_quartz_window_focus (GdkWindow *window,
}
}
static gint
window_type_hint_to_level (GdkWindowTypeHint hint)
static
gint window_type_hint_to_level (GdkWindowTypeHint hint)
{
/* the order in this switch statement corresponds to the actual
* stacking order: the first group is top, the last group is bottom
*/
switch (hint)
{
case GDK_WINDOW_TYPE_HINT_POPUP_MENU:
case GDK_WINDOW_TYPE_HINT_COMBO:
case GDK_WINDOW_TYPE_HINT_DND:
case GDK_WINDOW_TYPE_HINT_TOOLTIP:
return NSPopUpMenuWindowLevel;
case GDK_WINDOW_TYPE_HINT_NOTIFICATION:
case GDK_WINDOW_TYPE_HINT_SPLASHSCREEN:
return NSStatusWindowLevel;
case GDK_WINDOW_TYPE_HINT_DOCK:
case GDK_WINDOW_TYPE_HINT_UTILITY:
return NSFloatingWindowLevel;
case GDK_WINDOW_TYPE_HINT_MENU: /* Torn-off menu */
case GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU: /* Menu from menubar */
return NSTornOffMenuWindowLevel;
case GDK_WINDOW_TYPE_HINT_DOCK:
case GDK_WINDOW_TYPE_HINT_UTILITY:
return NSFloatingWindowLevel;
case GDK_WINDOW_TYPE_HINT_NOTIFICATION:
case GDK_WINDOW_TYPE_HINT_TOOLTIP:
return NSStatusWindowLevel;
case GDK_WINDOW_TYPE_HINT_SPLASHSCREEN:
case GDK_WINDOW_TYPE_HINT_POPUP_MENU:
case GDK_WINDOW_TYPE_HINT_COMBO:
case GDK_WINDOW_TYPE_HINT_DND:
return NSPopUpMenuWindowLevel;
case GDK_WINDOW_TYPE_HINT_NORMAL: /* Normal toplevel window */
case GDK_WINDOW_TYPE_HINT_DIALOG: /* Dialog window */
@@ -2354,7 +2351,7 @@ window_type_hint_to_level (GdkWindowTypeHint hint)
return NSNormalWindowLevel;
}
static gboolean
static gboolean
window_type_hint_to_shadow (GdkWindowTypeHint hint)
{
switch (hint)
@@ -2384,31 +2381,13 @@ window_type_hint_to_shadow (GdkWindowTypeHint hint)
return FALSE;
}
static gboolean
window_type_hint_to_hides_on_deactivate (GdkWindowTypeHint hint)
{
switch (hint)
{
case GDK_WINDOW_TYPE_HINT_UTILITY:
case GDK_WINDOW_TYPE_HINT_MENU: /* Torn-off menu */
case GDK_WINDOW_TYPE_HINT_SPLASHSCREEN:
case GDK_WINDOW_TYPE_HINT_NOTIFICATION:
case GDK_WINDOW_TYPE_HINT_TOOLTIP:
return TRUE;
default:
break;
}
return FALSE;
}
static void
gdk_quartz_window_set_type_hint (GdkWindow *window,
GdkWindowTypeHint hint)
{
GdkWindowImplQuartz *impl;
if (GDK_WINDOW_DESTROYED (window) ||
!WINDOW_IS_TOPLEVEL (window))
return;
@@ -2423,7 +2402,6 @@ gdk_quartz_window_set_type_hint (GdkWindow *window,
[impl->toplevel setHasShadow: window_type_hint_to_shadow (hint)];
[impl->toplevel setLevel: window_type_hint_to_level (hint)];
[impl->toplevel setHidesOnDeactivate: window_type_hint_to_hides_on_deactivate (hint)];
}
static GdkWindowTypeHint
@@ -2641,7 +2619,6 @@ gdk_quartz_window_set_decorations (GdkWindow *window,
defer:NO];
[impl->toplevel setHasShadow: window_type_hint_to_shadow (impl->type_hint)];
[impl->toplevel setLevel: window_type_hint_to_level (impl->type_hint)];
[impl->toplevel setHidesOnDeactivate: window_type_hint_to_hides_on_deactivate (impl->type_hint)];
[impl->toplevel setContentView:old_view];
}

View File

@@ -183,7 +183,6 @@ gdk_device_core_set_window_cursor (GdkDevice *device,
x, y);
wl_surface_attach (wd->pointer_surface, buffer, 0, 0);
wl_surface_damage (wd->pointer_surface, 0, 0, w, h);
wl_surface_commit(wd->pointer_surface);
g_object_unref (cursor);
}
@@ -1241,14 +1240,14 @@ static GdkModifierType
get_modifier (struct xkb_state *state)
{
GdkModifierType modifiers = 0;
modifiers |= (xkb_state_mod_name_is_active (state, XKB_MOD_NAME_SHIFT, XKB_STATE_MODS_EFFECTIVE) > 0)?GDK_SHIFT_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, XKB_MOD_NAME_CAPS, XKB_STATE_MODS_EFFECTIVE) > 0)?GDK_LOCK_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, XKB_MOD_NAME_CTRL, XKB_STATE_MODS_EFFECTIVE) > 0)?GDK_CONTROL_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, XKB_MOD_NAME_ALT, XKB_STATE_MODS_EFFECTIVE) > 0)?GDK_MOD1_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, "Mod2", XKB_STATE_MODS_EFFECTIVE) > 0)?GDK_MOD2_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, "Mod3", XKB_STATE_MODS_EFFECTIVE) > 0)?GDK_MOD3_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, XKB_MOD_NAME_LOGO, XKB_STATE_MODS_EFFECTIVE) > 0)?GDK_MOD4_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, "Mod5", XKB_STATE_MODS_EFFECTIVE) > 0)?GDK_MOD5_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, XKB_MOD_NAME_SHIFT, XKB_STATE_EFFECTIVE) > 0)?GDK_SHIFT_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, XKB_MOD_NAME_CAPS, XKB_STATE_EFFECTIVE) > 0)?GDK_LOCK_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, XKB_MOD_NAME_CTRL, XKB_STATE_EFFECTIVE) > 0)?GDK_CONTROL_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, XKB_MOD_NAME_ALT, XKB_STATE_EFFECTIVE) > 0)?GDK_MOD1_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, "Mod2", XKB_STATE_EFFECTIVE) > 0)?GDK_MOD2_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, "Mod3", XKB_STATE_EFFECTIVE) > 0)?GDK_MOD3_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, XKB_MOD_NAME_LOGO, XKB_STATE_EFFECTIVE) > 0)?GDK_MOD4_MASK:0;
modifiers |= (xkb_state_mod_name_is_active (state, "Mod5", XKB_STATE_EFFECTIVE) > 0)?GDK_MOD5_MASK:0;
return modifiers;
}
@@ -1325,11 +1324,16 @@ deliver_key_event(GdkWaylandDevice *device,
struct xkb_state *xkb_state;
GdkKeymap *keymap;
xkb_keysym_t sym;
uint32_t num_syms;
const xkb_keysym_t *syms;
keymap = device->keymap;
xkb_state = _gdk_wayland_keymap_get_xkb_state (keymap);
sym = xkb_state_key_get_one_sym (xkb_state, key);
num_syms = xkb_key_get_syms (xkb_state, key, &syms);
sym = XKB_KEY_NoSymbol;
if (num_syms == 1)
sym = syms[0];
device->time = time;
device->modifiers = get_modifier (xkb_state);

View File

@@ -96,8 +96,7 @@ static void
output_handle_geometry(void *data,
struct wl_output *wl_output,
int x, int y, int physical_width, int physical_height,
int subpixel, const char *make, const char *model,
int32_t transform)
int subpixel, const char *make, const char *model)
{
/*
g_signal_emit_by_name (screen, "monitors-changed");
@@ -120,8 +119,8 @@ static const struct wl_output_listener output_listener = {
};
static void
gdk_registry_handle_global(void *data, struct wl_registry *registry, uint32_t id,
const char *interface, uint32_t version)
gdk_display_handle_global(struct wl_display *display, uint32_t id,
const char *interface, uint32_t version, void *data)
{
GdkWaylandDisplay *display_wayland = data;
GdkDisplay *gdk_display = GDK_DISPLAY_OBJECT (data);
@@ -129,29 +128,27 @@ gdk_registry_handle_global(void *data, struct wl_registry *registry, uint32_t id
if (strcmp(interface, "wl_compositor") == 0) {
display_wayland->compositor =
wl_registry_bind(display_wayland->wl_registry, id, &wl_compositor_interface, 1);
wl_display_bind(display, id, &wl_compositor_interface);
} else if (strcmp(interface, "wl_shm") == 0) {
display_wayland->shm =
wl_registry_bind(display_wayland->wl_registry, id, &wl_shm_interface, 1);
display_wayland->shm = wl_display_bind(display, id, &wl_shm_interface);
/* SHM interface is prerequisite */
_gdk_wayland_display_load_cursor_theme(display_wayland);
} else if (strcmp(interface, "wl_shell") == 0) {
display_wayland->shell =
wl_registry_bind(display_wayland->wl_registry, id, &wl_shell_interface, 1);
display_wayland->shell = wl_display_bind(display, id, &wl_shell_interface);
} else if (strcmp(interface, "wl_output") == 0) {
display_wayland->output =
wl_registry_bind(display_wayland->wl_registry, id, &wl_output_interface, 1);
wl_display_bind(display, id, &wl_output_interface);
wl_output_add_listener(display_wayland->output,
&output_listener, display_wayland);
} else if (strcmp(interface, "wl_seat") == 0) {
seat = wl_registry_bind(display_wayland->wl_registry, id, &wl_seat_interface, 1);
seat = wl_display_bind (display, id, &wl_seat_interface);
_gdk_wayland_device_manager_add_device (gdk_display->device_manager,
seat);
} else if (strcmp(interface, "wl_data_device_manager") == 0) {
display_wayland->data_device_manager =
wl_registry_bind(display_wayland->wl_registry, id,
&wl_data_device_manager_interface, 1);
wl_display_bind(display, id,
&wl_data_device_manager_interface);
}
}
@@ -213,10 +210,6 @@ gdk_display_init_egl(GdkDisplay *display)
}
#endif
static const struct wl_registry_listener registry_listener = {
gdk_registry_handle_global
};
GdkDisplay *
_gdk_wayland_display_open (const gchar *display_name)
{
@@ -238,13 +231,14 @@ _gdk_wayland_display_open (const gchar *display_name)
display->device_manager = _gdk_wayland_device_manager_new (display);
/* Set up listener so we'll catch all events. */
display_wayland->wl_registry = wl_display_get_registry(display_wayland->wl_display);
wl_registry_add_listener(display_wayland->wl_registry, &registry_listener, display_wayland);
wl_display_add_global_listener(display_wayland->wl_display,
gdk_display_handle_global, display_wayland);
#ifdef GDK_WAYLAND_USE_EGL
gdk_display_init_egl(display);
#else
wl_display_dispatch(display_wayland->wl_display);
wl_display_iterate(wl_display, WL_DISPLAY_READABLE);
wl_display_roundtrip(wl_display);
#endif
display_wayland->event_source =
@@ -357,7 +351,8 @@ gdk_wayland_display_flush (GdkDisplay *display)
g_return_if_fail (GDK_IS_DISPLAY (display));
if (!display->closed)
wl_display_flush(GDK_WAYLAND_DISPLAY (display)->wl_display);;
_gdk_wayland_display_flush (display,
GDK_WAYLAND_DISPLAY (display)->event_source);
}
static gboolean

View File

@@ -76,7 +76,6 @@ struct _GdkWaylandDisplay
/* Wayland fields below */
struct wl_display *wl_display;
struct wl_registry *wl_registry;
struct wl_compositor *compositor;
struct wl_shm *shm;
struct wl_shell *shell;

View File

@@ -136,7 +136,7 @@ gdk_wayland_display_manager_lookup_keyval (GdkDisplayManager *manager,
{
g_return_val_if_fail (keyval_name != NULL, 0);
return xkb_keysym_from_name (keyval_name, 0);
return xkb_keysym_from_name(keyval_name);
}
static gchar *

View File

@@ -44,7 +44,8 @@ gdk_event_source_prepare(GSource *base, gint *timeout)
if (_gdk_event_queue_find_first (source->display) != NULL)
return TRUE;
wl_display_flush(display->wl_display);
while (source->mask & WL_DISPLAY_WRITABLE)
wl_display_iterate(display->wl_display, WL_DISPLAY_WRITABLE);
return FALSE;
}
@@ -96,6 +97,16 @@ static GSourceFuncs wl_glib_source_funcs = {
gdk_event_source_finalize
};
static int
gdk_event_source_update(uint32_t mask, void *data)
{
GdkWaylandEventSource *source = data;
source->mask = mask;
return 0;
}
void
_gdk_wayland_display_deliver_event (GdkDisplay *display, GdkEvent *event)
{
@@ -123,7 +134,8 @@ _gdk_wayland_display_event_source_new (GdkDisplay *display)
display_wayland = GDK_WAYLAND_DISPLAY (display);
wl_source->display = display;
wl_source->pfd.fd = wl_display_get_fd(display_wayland->wl_display);
wl_source->pfd.fd = wl_display_get_fd(display_wayland->wl_display,
gdk_event_source_update, source);
wl_source->pfd.events = G_IO_IN | G_IO_ERR;
g_source_add_poll(source, &wl_source->pfd);
@@ -136,6 +148,16 @@ _gdk_wayland_display_event_source_new (GdkDisplay *display)
return source;
}
void
_gdk_wayland_display_flush (GdkDisplay *display, GSource *source)
{
GdkWaylandEventSource *wayland_source = (GdkWaylandEventSource *) source;
while (wayland_source->mask & WL_DISPLAY_WRITABLE)
wl_display_iterate(GDK_WAYLAND_DISPLAY (display)->wl_display,
WL_DISPLAY_WRITABLE);
}
void
_gdk_wayland_display_queue_events (GdkDisplay *display)
{
@@ -144,9 +166,10 @@ _gdk_wayland_display_queue_events (GdkDisplay *display)
display_wayland = GDK_WAYLAND_DISPLAY (display);
source = (GdkWaylandEventSource *) display_wayland->event_source;
if (source->pfd.revents)
{
wl_display_dispatch(display_wayland->wl_display);
source->pfd.revents = 0;
wl_display_iterate(display_wayland->wl_display, WL_DISPLAY_READABLE);
source->pfd.revents = 0;
}
}

View File

@@ -221,7 +221,7 @@ _gdk_wayland_keymap_new ()
names.layout = "us";
names.variant = "";
names.options = "";
keymap->xkb_keymap = xkb_keymap_new_from_names (context, &names, 0);
keymap->xkb_keymap = xkb_map_new_from_names(context, &names, XKB_MAP_COMPILE_PLACEHOLDER);
keymap->xkb_state = xkb_state_new (keymap->xkb_keymap);
xkb_context_unref (context);
@@ -246,7 +246,7 @@ _gdk_wayland_keymap_new_from_fd (uint32_t format,
return NULL;
}
keymap->xkb_keymap = xkb_keymap_new_from_string (context, map_str, format, 0);
keymap->xkb_keymap = xkb_map_new_from_string (context, map_str, format, XKB_MAP_COMPILE_PLACEHOLDER);
munmap (map_str, size);
close (fd);
keymap->xkb_state = xkb_state_new (keymap->xkb_keymap);

View File

@@ -137,6 +137,7 @@ GdkKeymap *_gdk_wayland_device_get_keymap (GdkDevice *device);
void _gdk_wayland_display_deliver_event (GdkDisplay *display, GdkEvent *event);
GSource *_gdk_wayland_display_event_source_new (GdkDisplay *display);
void _gdk_wayland_display_queue_events (GdkDisplay *display);
void _gdk_wayland_display_flush (GdkDisplay *display, GSource *source);
GdkAppLaunchContext *_gdk_wayland_display_get_app_launch_context (GdkDisplay *display);

View File

@@ -1563,7 +1563,6 @@ gdk_wayland_window_process_updates_recurse (GdkWindow *window,
cairo_region_get_rectangle (region, i, &rect);
wl_surface_damage (impl->surface,
rect.x, rect.y, rect.width, rect.height);
wl_surface_commit(impl->surface);
}
_gdk_window_process_updates_recurse (window, region);

View File

@@ -27,7 +27,6 @@
#include "config.h"
#include <stdlib.h>
#include <windows.h>
#include "gdk.h"
#include "gdkwindowimpl.h"
@@ -1534,7 +1533,7 @@ gdk_win32_window_set_urgency_hint (GdkWindow *window,
gboolean urgent)
{
FLASHWINFO flashwinfo;
typedef BOOL (WINAPI *PFN_FlashWindowEx) (FLASHWINFO*);
typedef BOOL (*PFN_FlashWindowEx) (FLASHWINFO*);
PFN_FlashWindowEx flashWindowEx = NULL;
g_return_if_fail (GDK_IS_WINDOW (window));
@@ -3265,7 +3264,7 @@ gdk_win32_window_set_opacity (GdkWindow *window,
gdouble opacity)
{
LONG exstyle;
typedef BOOL (WINAPI *PFN_SetLayeredWindowAttributes) (HWND, COLORREF, BYTE, DWORD);
typedef BOOL (*PFN_SetLayeredWindowAttributes) (HWND, COLORREF, BYTE, DWORD);
PFN_SetLayeredWindowAttributes setLayeredWindowAttributes = NULL;
g_return_if_fail (GDK_IS_WINDOW (window));

View File

@@ -1459,6 +1459,7 @@ _gdk_x11_display_open (const gchar *display_name)
_gdk_x11_screen_setup (display_x11->screens[i]);
g_signal_emit_by_name (display, "opened");
g_signal_emit_by_name (gdk_display_manager_get (), "display-opened", display);
return display;
}

View File

@@ -51,13 +51,8 @@ gdk_x11_display_manager_open_display (GdkDisplayManager *manager,
GdkDisplay *display;
display = _gdk_x11_display_open (name);
if (display != NULL)
{
if (manager_x11->default_display == NULL)
gdk_display_manager_set_default_display (manager, display);
g_signal_emit_by_name (manager, "display-opened", display);
}
if (manager_x11->default_display == NULL && display != NULL)
gdk_display_manager_set_default_display (manager, display);
return display;
}

View File

@@ -1113,8 +1113,6 @@ MyEnhancedXkbTranslateKeyCode(register XkbDescPtr xkb,
int found = 0;
for (i=0,entry=type->map;i<type->map_count;i++,entry++) {
if (!entry->active || syms[col+entry->level] == syms[col])
continue;
if (mods_rtrn) {
int bits = 0;
unsigned long tmp = entry->mods.mask;
@@ -1125,22 +1123,14 @@ MyEnhancedXkbTranslateKeyCode(register XkbDescPtr xkb,
}
/* We always add one-modifiers levels to mods_rtrn since
* they can't wipe out bits in the state unless the
* level would be triggered. But not if they don't change
* the symbol (otherwise we can't discriminate Shift-F10
* and F10 anymore). And don't add modifiers that are
* explicitly marked as preserved, either.
* level would be triggered. But return other modifiers
*
*/
if (bits == 1 ||
(mods&type->mods.mask) == entry->mods.mask)
{
if (type->preserve)
*mods_rtrn |= (entry->mods.mask & ~type->preserve[i].mask);
else
*mods_rtrn |= entry->mods.mask;
}
if (bits == 1 || (mods&type->mods.mask)==entry->mods.mask)
*mods_rtrn |= entry->mods.mask;
}
if (!found && ((mods&type->mods.mask) == entry->mods.mask)) {
if (!found&&entry->active&&((mods&type->mods.mask)==entry->mods.mask)) {
col+= entry->level;
if (type->preserve)
preserve= type->preserve[i].mask;

View File

@@ -311,10 +311,6 @@ void _gdk_x11_cursor_display_finalize (GdkDisplay *display);
void _gdk_x11_window_register_dnd (GdkWindow *window);
GdkDragContext * _gdk_x11_window_drag_begin (GdkWindow *window,
GdkDevice *device,
GList *targets);
gboolean _gdk_x11_get_xft_setting (GdkScreen *screen,
const gchar *name,
GValue *value);

View File

@@ -82,8 +82,7 @@ static const char gdk_settings_names[] =
"Gtk/VisibleFocus\0" "gtk-visible-focus\0"
"Gtk/ShellShowsAppMenu\0" "gtk-shell-shows-app-menu\0"
"Gtk/ShellShowsMenubar\0" "gtk-shell-shows-menubar\0"
"Gtk/EnablePrimaryPaste\0" "gtk-enable-primary-paste\0"
"Gtk/RecentFilesMaxAge\0" "gtk-recent-files-max-age\0";
"Gtk/EnablePrimaryPaste\0" "gtk-enable-primary-paste\0";
@@ -141,6 +140,5 @@ static const struct
{ 1767, 1784 },
{ 1802, 1824 },
{ 1849, 1871 },
{ 1895, 1918 },
{ 1943, 1965 }
{ 1895, 1918 }
};

View File

@@ -4858,11 +4858,6 @@ _gdk_x11_display_before_process_all_updates (GdkDisplay *display)
void
_gdk_x11_display_after_process_all_updates (GdkDisplay *display)
{
/* Sync after all drawing, otherwise the client can get "ahead" of
the server rendering during animations, such that we fill up
the Xserver pipes with sync rendering ops not letting other
clients (including the VM) do anything. */
XSync (GDK_DISPLAY_XDISPLAY (display), FALSE);
}
static Bool
@@ -4953,6 +4948,10 @@ gdk_x11_window_get_xid (GdkWindow *window)
return GDK_WINDOW_IMPL_X11 (window->impl)->xid;
}
extern GdkDragContext * _gdk_x11_window_drag_begin (GdkWindow *window,
GdkDevice *device,
GList *targets);
static void
gdk_window_impl_x11_class_init (GdkWindowImplX11Class *klass)
{

View File

@@ -148,7 +148,6 @@ deprecated_h_sources = \
deprecated/gtkcolorsel.h \
deprecated/gtkcolorseldialog.h \
deprecated/gtkfontsel.h \
deprecated/gtkgradient.h \
deprecated/gtkhandlebox.h \
deprecated/gtkhbbox.h \
deprecated/gtkhbox.h \
@@ -157,9 +156,8 @@ deprecated_h_sources = \
deprecated/gtkhscrollbar.h \
deprecated/gtkhseparator.h \
deprecated/gtkhsv.h \
deprecated/gtkrc.h \
deprecated/gtkstyle.h \
deprecated/gtksymboliccolor.h \
deprecated/gtkrc.h \
deprecated/gtktable.h \
deprecated/gtktearoffmenuitem.h \
deprecated/gtkvbbox.h \
@@ -169,10 +167,6 @@ deprecated_h_sources = \
deprecated/gtkvseparator.h \
deprecated/gtkvpaned.h
deprecated_private_h_sources = \
deprecated/gtkgradientprivate.h \
deprecated/gtksymboliccolorprivate.h
gtk_public_h_sources = \
gtk.h \
gtkx.h \
@@ -255,6 +249,7 @@ gtk_public_h_sources = \
gtkfontchooserdialog.h \
gtkfontchooserwidget.h \
gtkframe.h \
gtkgradient.h \
gtkgrid.h \
gtkiconfactory.h \
gtkicontheme.h \
@@ -335,6 +330,7 @@ gtk_public_h_sources = \
gtkstyleproperties.h \
gtkstyleprovider.h \
gtkswitch.h \
gtksymboliccolor.h \
gtktestutils.h \
gtktextattributes.h \
gtktextbuffer.h \
@@ -423,7 +419,6 @@ gtk_private_h_sources = \
gtkboxprivate.h \
gtkbuilderprivate.h \
gtkbuttonprivate.h \
gtkcairoblurprivate.h \
gtkcellareaboxcontextprivate.h \
gtkcolorswatchprivate.h \
gtkcoloreditorprivate.h \
@@ -431,11 +426,10 @@ gtk_private_h_sources = \
gtkcolorscaleprivate.h \
gtkcolorchooserprivate.h \
gtkcontainerprivate.h \
gtkcssanimationprivate.h \
gtkcssanimatedvaluesprivate.h \
gtkcssarrayvalueprivate.h \
gtkcssbgsizevalueprivate.h \
gtkcssbordervalueprivate.h \
gtkcsscolorvalueprivate.h \
gtkcsscomputedvaluesprivate.h \
gtkcsscornervalueprivate.h \
gtkcsscustompropertyprivate.h \
@@ -451,7 +445,6 @@ gtk_private_h_sources = \
gtkcssimagewin32private.h \
gtkcssinheritvalueprivate.h \
gtkcssinitialvalueprivate.h \
gtkcsskeyframesprivate.h \
gtkcsslookupprivate.h \
gtkcssmatcherprivate.h \
gtkcssnumbervalueprivate.h \
@@ -482,7 +475,6 @@ gtk_private_h_sources = \
gtkfilesystemmodel.h \
gtkfontchooserprivate.h \
gtkfontchooserutils.h \
gtkhslaprivate.h \
gtkiconcache.h \
gtkiconhelperprivate.h \
gtkiconviewprivate.h \
@@ -497,6 +489,7 @@ gtk_private_h_sources = \
gtkmenuitemprivate.h \
gtkmenushellprivate.h \
gtkmnemonichash.h \
gtkmodelmenu.h \
gtkmodelmenuitem.h \
gtkmodifierstyle.h \
gtkmodulesprivate.h \
@@ -522,7 +515,6 @@ gtk_private_h_sources = \
gtkselectionprivate.h \
gtksettingsprivate.h \
gtksizegroup-private.h \
gtksizerequestcacheprivate.h \
gtksocketprivate.h \
gtkstyleanimationprivate.h \
gtkstylecascadeprivate.h \
@@ -530,6 +522,7 @@ gtk_private_h_sources = \
gtkstylepropertiesprivate.h \
gtkstylepropertyprivate.h \
gtkstyleproviderprivate.h \
gtksymboliccolorprivate.h \
gtktextbtree.h \
gtktextbufferserialize.h \
gtktextchildprivate.h \
@@ -558,7 +551,6 @@ deprecated_c_sources = \
deprecated/gtkcolorsel.c \
deprecated/gtkcolorseldialog.c \
deprecated/gtkfontsel.c \
deprecated/gtkgradient.c \
deprecated/gtkhandlebox.c \
deprecated/gtkhbbox.c \
deprecated/gtkhbox.c \
@@ -569,7 +561,6 @@ deprecated_c_sources = \
deprecated/gtkhsv.c \
deprecated/gtkrc.c \
deprecated/gtkstyle.c \
deprecated/gtksymboliccolor.c \
deprecated/gtktable.c \
deprecated/gtktearoffmenuitem.c \
deprecated/gtkvbbox.c \
@@ -624,7 +615,6 @@ gtk_base_c_sources = \
gtkbuilderparser.c \
gtkbuilder-menus.c \
gtkbutton.c \
gtkcairoblur.c \
gtkcalendar.c \
gtkcellarea.c \
gtkcellareabox.c \
@@ -656,11 +646,10 @@ gtk_base_c_sources = \
gtkcombobox.c \
gtkcomboboxtext.c \
gtkcontainer.c \
gtkcssanimation.c \
gtkcssanimatedvalues.c \
gtkcssarrayvalue.c \
gtkcssbgsizevalue.c \
gtkcssbordervalue.c \
gtkcsscolorvalue.c \
gtkcsscomputedvalues.c \
gtkcsscornervalue.c \
gtkcsscustomproperty.c \
@@ -676,7 +665,6 @@ gtk_base_c_sources = \
gtkcssimagewin32.c \
gtkcssinheritvalue.c \
gtkcssinitialvalue.c \
gtkcsskeyframes.c \
gtkcsslookup.c \
gtkcssmatcher.c \
gtkcssnumbervalue.c \
@@ -725,8 +713,8 @@ gtk_base_c_sources = \
gtkfontchooserutils.c \
gtkfontchooserwidget.c \
gtkframe.c \
gtkgradient.c \
gtkgrid.c \
gtkhsla.c \
gtkiconcache.c \
gtkiconcachevalidator.c \
gtkiconfactory.c \
@@ -812,7 +800,6 @@ gtk_base_c_sources = \
gtksettings.c \
gtksizegroup.c \
gtksizerequest.c \
gtksizerequestcache.c \
gtkshow.c \
gtkspinbutton.c \
gtkspinner.c \
@@ -827,6 +814,7 @@ gtk_base_c_sources = \
gtkstyleprovider.c \
gtkstyleproviderprivate.c \
gtkswitch.c \
gtksymboliccolor.c \
gtktestutils.c \
gtktextattributes.c \
gtktextbtree.c \
@@ -915,8 +903,6 @@ gtk_private_h_sources += \
gtkprinteroptionwidget.h \
gtksearchenginetracker.h
gtk_c_sources += $(gtk_os_unix_c_sources)
else
gtk_c_sources += $(gtk_dbus_built_sources)
endif
gtk_os_win32_c_sources = \
@@ -975,7 +961,6 @@ gtk_private_h_sources += $(gtk_use_quartz_private_h_sources)
endif
gtk_all_private_h_sources = \
$(deprecated_private_h_sources) \
$(gtk_private_h_sources) \
$(gtk_use_x11_private_h_sources) \
$(gtk_use_win32_private_h_sources) \

View File

@@ -6,6 +6,7 @@ gail_c_sources = \
gail.c \
gtkarrowaccessible.c \
gtkbooleancellaccessible.c \
gtkboxaccessible.c \
gtkbuttonaccessible.c \
gtkcellaccessible.c \
gtkcellaccessibleparent.c \
@@ -53,9 +54,9 @@ gail_c_sources = \
gailmisc.c
gail_private_h_sources = \
gail.h \
gtkarrowaccessible.h \
gtkbooleancellaccessible.h \
gtkboxaccessible.h \
gtkbuttonaccessible.h \
gtkcellaccessible.h \
gtkcellaccessibleparent.h \

View File

@@ -17,8 +17,6 @@
#include "config.h"
#include "gail.h"
#include <stdio.h>
#include <stdlib.h>
@@ -78,7 +76,6 @@ static GtkWidget* focus_before_menu = NULL;
static guint focus_notify_handler = 0;
static guint focus_tracker_id = 0;
static GQuark quark_focus_object = 0;
static int initialized = FALSE;
static AtkObject*
gail_get_accessible_for_widget (GtkWidget *widget,
@@ -797,25 +794,10 @@ gail_set_focus_object (AtkObject *focus_obj,
}
}
void
_gtk_accessibility_shutdown (void)
{
if (!initialized)
return;
initialized = FALSE;
g_clear_object (&atk_misc_instance);
#ifdef GDK_WINDOWING_X11
atk_bridge_adaptor_cleanup ();
#endif
_gail_util_uninstall ();
}
void
_gtk_accessibility_init (void)
{
static int initialized = FALSE;
if (initialized)
return;

View File

@@ -206,17 +206,6 @@ do_window_event_initialization (void)
(GCallback) window_removed, NULL);
}
static void
undo_window_event_initialization (void)
{
AtkObject *root;
root = atk_get_root ();
g_signal_handlers_disconnect_by_func (root, (GCallback) window_added, NULL);
g_signal_handlers_disconnect_by_func (root, (GCallback) window_removed, NULL);
}
static AtkKeyEventStruct *
atk_key_event_from_gdk_event_key (GdkEventKey *key)
{
@@ -352,12 +341,6 @@ gail_util_get_toolkit_version (void)
return GTK_VERSION;
}
void
_gail_util_uninstall (void)
{
undo_window_event_initialization ();
}
void
_gail_util_install (void)
{

View File

@@ -22,8 +22,7 @@
G_BEGIN_DECLS
void _gail_util_install (void);
void _gail_util_uninstall (void);
void _gail_util_install (void);
gboolean _gail_util_key_snooper (GtkWidget *the_widget,
GdkEventKey *event);

View File

@@ -20,10 +20,6 @@
#include <gtk/gtk.h>
#include "gtkarrowaccessible.h"
struct _GtkArrowAccessiblePrivate
{
gchar *image_description;
};
static void atk_image_interface_init (AtkImageIface *iface);
@@ -44,7 +40,7 @@ gtk_arrow_accessible_finalize (GObject *object)
{
GtkArrowAccessible *arrow = GTK_ARROW_ACCESSIBLE (object);
g_free (arrow->priv->image_description);
g_free (arrow->image_description);
G_OBJECT_CLASS (_gtk_arrow_accessible_parent_class)->finalize (object);
}
@@ -58,16 +54,12 @@ _gtk_arrow_accessible_class_init (GtkArrowAccessibleClass *klass)
atk_object_class->initialize = gtk_arrow_accessible_initialize;
gobject_class->finalize = gtk_arrow_accessible_finalize;
g_type_class_add_private (klass, sizeof (GtkArrowAccessiblePrivate));
}
static void
_gtk_arrow_accessible_init (GtkArrowAccessible *arrow)
{
arrow->priv = G_TYPE_INSTANCE_GET_PRIVATE (arrow,
GTK_TYPE_ARROW_ACCESSIBLE,
GtkArrowAccessiblePrivate);
arrow->image_description = NULL;
}
static const gchar *
@@ -75,7 +67,7 @@ gtk_arrow_accessible_get_image_description (AtkImage *obj)
{
GtkArrowAccessible *arrow = GTK_ARROW_ACCESSIBLE (obj);
return arrow->priv->image_description;
return arrow->image_description;
}
static gboolean
@@ -84,8 +76,8 @@ gtk_arrow_accessible_set_image_description (AtkImage *obj,
{
GtkArrowAccessible *arrow = GTK_ARROW_ACCESSIBLE (obj);
g_free (arrow->priv->image_description);
arrow->priv->image_description = g_strdup (description);
g_free (arrow->image_description);
arrow->image_description = g_strdup (description);
return TRUE;

View File

@@ -29,15 +29,14 @@ G_BEGIN_DECLS
#define GTK_IS_ARROW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_ARROW_ACCESSIBLE))
#define GTK_ARROW_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_ARROW_ACCESSIBLE, GtkArrowAccessibleClass))
typedef struct _GtkArrowAccessible GtkArrowAccessible;
typedef struct _GtkArrowAccessibleClass GtkArrowAccessibleClass;
typedef struct _GtkArrowAccessiblePrivate GtkArrowAccessiblePrivate;
typedef struct _GtkArrowAccessible GtkArrowAccessible;
typedef struct _GtkArrowAccessibleClass GtkArrowAccessibleClass;
struct _GtkArrowAccessible
{
GtkWidgetAccessible parent;
GtkArrowAccessiblePrivate *priv;
gchar *image_description;
};
struct _GtkArrowAccessibleClass

View File

@@ -20,12 +20,6 @@
#include <gtk/gtk.h>
#include "gtkbooleancellaccessible.h"
struct _GtkBooleanCellAccessiblePrivate
{
gboolean cell_value;
gboolean cell_sensitive;
};
static AtkActionIface *parent_action_iface;
static gint
@@ -88,10 +82,10 @@ gtk_boolean_cell_accessible_ref_state_set (AtkObject *accessible)
state_set = ATK_OBJECT_CLASS (_gtk_boolean_cell_accessible_parent_class)->ref_state_set (accessible);
if (cell->priv->cell_value)
if (cell->cell_value)
atk_state_set_add_state (state_set, ATK_STATE_CHECKED);
if (cell->priv->cell_sensitive)
if (cell->cell_sensitive)
atk_state_set_add_state (state_set, ATK_STATE_SENSITIVE);
else
atk_state_set_remove_state (state_set, ATK_STATE_SENSITIVE);
@@ -105,25 +99,22 @@ gtk_boolean_cell_accessible_update_cache (GtkCellAccessible *cell)
GtkBooleanCellAccessible *boolean_cell = GTK_BOOLEAN_CELL_ACCESSIBLE (cell);
gboolean active;
gboolean sensitive;
GtkCellRenderer *renderer;
g_object_get (cell, "renderer", &renderer, NULL);
g_object_get (renderer,
g_object_get (G_OBJECT (GTK_RENDERER_CELL_ACCESSIBLE (cell)->renderer),
"active", &active,
"sensitive", &sensitive,
NULL);
g_object_unref (renderer);
if (boolean_cell->priv->cell_value != active)
if (boolean_cell->cell_value != active)
{
boolean_cell->priv->cell_value = !boolean_cell->priv->cell_value;
boolean_cell->cell_value = !boolean_cell->cell_value;
atk_object_notify_state_change (ATK_OBJECT (cell), ATK_STATE_CHECKED, active);
}
if (boolean_cell->priv->cell_sensitive != sensitive)
if (boolean_cell->cell_sensitive != sensitive)
{
boolean_cell->priv->cell_sensitive = !boolean_cell->priv->cell_sensitive;
boolean_cell->cell_sensitive = !boolean_cell->cell_sensitive;
atk_object_notify_state_change (ATK_OBJECT (cell), ATK_STATE_CHECKED, sensitive);
}
@@ -138,15 +129,10 @@ _gtk_boolean_cell_accessible_class_init (GtkBooleanCellAccessibleClass *klass)
atkobject_class->ref_state_set = gtk_boolean_cell_accessible_ref_state_set;
cell_class->update_cache = gtk_boolean_cell_accessible_update_cache;
g_type_class_add_private (klass, sizeof (GtkBooleanCellAccessiblePrivate));
}
static void
_gtk_boolean_cell_accessible_init (GtkBooleanCellAccessible *cell)
{
cell->priv = G_TYPE_INSTANCE_GET_PRIVATE (cell,
GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE,
GtkBooleanCellAccessiblePrivate);
}

View File

@@ -30,15 +30,14 @@ G_BEGIN_DECLS
#define GTK_IS_BOOLEAN_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE))
#define GTK_BOOLEAN_CELL_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE, GtkBooleanCellAccessibleClass))
typedef struct _GtkBooleanCellAccessible GtkBooleanCellAccessible;
typedef struct _GtkBooleanCellAccessibleClass GtkBooleanCellAccessibleClass;
typedef struct _GtkBooleanCellAccessiblePrivate GtkBooleanCellAccessiblePrivate;
typedef struct _GtkBooleanCellAccessible GtkBooleanCellAccessible;
typedef struct _GtkBooleanCellAccessibleClass GtkBooleanCellAccessibleClass;
struct _GtkBooleanCellAccessible
{
GtkRendererCellAccessible parent;
GtkBooleanCellAccessiblePrivate *priv;
gboolean cell_value;
gboolean cell_sensitive;
};
struct _GtkBooleanCellAccessibleClass

View File

@@ -1,5 +1,5 @@
/* GAIL - The GNOME Accessibility Implementation Library
* Copyright 2001 Sun Microsystems Inc.
* Copyright 2004 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -15,16 +15,31 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GTK_GAIL_H__
#define __GTK_GAIL_H__
#include "config.h"
#include <glib.h>
#include <gtk/gtk.h>
#include "gtkboxaccessible.h"
G_BEGIN_DECLS
void _gtk_accessibility_shutdown (void);
void _gtk_accessibility_init (void);
G_DEFINE_TYPE (GtkBoxAccessible, _gtk_box_accessible, GTK_TYPE_CONTAINER_ACCESSIBLE)
G_END_DECLS
static void
gtk_box_accessible_initialize (AtkObject *accessible,
gpointer data)
{
ATK_OBJECT_CLASS (_gtk_box_accessible_parent_class)->initialize (accessible, data);
accessible->role = ATK_ROLE_FILLER;
}
#endif /* __GTK_GAIL_H__ */
static void
_gtk_box_accessible_class_init (GtkBoxAccessibleClass *klass)
{
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
class->initialize = gtk_box_accessible_initialize;
}
static void
_gtk_box_accessible_init (GtkBoxAccessible *scale)
{
}

View File

@@ -0,0 +1,49 @@
/* GAIL - The GNOME Accessibility Implementation Library
* Copyright 2004 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GTK_BOX_ACCESSIBLE_H__
#define __GTK_BOX_ACCESSIBLE_H__
#include "gtkcontaineraccessible.h"
G_BEGIN_DECLS
#define GTK_TYPE_BOX_ACCESSIBLE (_gtk_box_accessible_get_type ())
#define GTK_BOX_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_BOX_ACCESSIBLE, GtkBoxAccessible))
#define GTK_BOX_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_BOX_ACCESSIBLE, GtkBoxAccessibleClass))
#define GTK_IS_BOX_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_BOX_ACCESSIBLE))
#define GTK_IS_BOX_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_BOX_ACCESSIBLE))
#define GTK_BOX_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_BOX_ACCESSIBLE, GtkBoxAccessibleClass))
typedef struct _GtkBoxAccessible GtkBoxAccessible;
typedef struct _GtkBoxAccessibleClass GtkBoxAccessibleClass;
struct _GtkBoxAccessible
{
GtkContainerAccessible parent;
};
struct _GtkBoxAccessibleClass
{
GtkContainerAccessibleClass parent_class;
};
GType _gtk_box_accessible_get_type (void);
G_END_DECLS
#endif /* __GTK_BOX_ACCESSIBLE_H__ */

View File

@@ -29,15 +29,12 @@ G_BEGIN_DECLS
#define GTK_IS_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_BUTTON_ACCESSIBLE))
#define GTK_BUTTON_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_BUTTON_ACCESSIBLE, GtkButtonAccessibleClass))
typedef struct _GtkButtonAccessible GtkButtonAccessible;
typedef struct _GtkButtonAccessibleClass GtkButtonAccessibleClass;
typedef struct _GtkButtonAccessiblePrivate GtkButtonAccessiblePrivate;
typedef struct _GtkButtonAccessible GtkButtonAccessible;
typedef struct _GtkButtonAccessibleClass GtkButtonAccessibleClass;
struct _GtkButtonAccessible
{
GtkContainerAccessible parent;
GtkButtonAccessiblePrivate *priv;
};
struct _GtkButtonAccessibleClass

View File

@@ -83,7 +83,7 @@ gtk_cell_accessible_get_index_in_parent (AtkObject *obj)
parent = atk_object_get_parent (obj);
if (GTK_IS_CONTAINER_CELL_ACCESSIBLE (parent))
return g_list_index (_gtk_container_cell_accessible_get_children (GTK_CONTAINER_CELL_ACCESSIBLE (parent)), obj);
return g_list_index (GTK_CONTAINER_CELL_ACCESSIBLE (parent)->children, obj);
parent = gtk_widget_get_accessible (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell)));
if (parent == NULL)
@@ -287,13 +287,10 @@ gtk_cell_accessible_action_do_action (AtkAction *action,
{
case 0:
_gtk_cell_accessible_parent_expand_collapse (parent, cell);
break;
case 1:
_gtk_cell_accessible_parent_edit (parent, cell);
break;
case 2:
_gtk_cell_accessible_parent_activate (parent, cell);
break;
default:
return FALSE;
}

View File

@@ -30,15 +30,12 @@ G_BEGIN_DECLS
#define GTK_IS_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CELL_ACCESSIBLE))
#define GTK_CELL_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CELL_ACCESSIBLE, GtkCellAccessibleClass))
typedef struct _GtkCellAccessible GtkCellAccessible;
typedef struct _GtkCellAccessibleClass GtkCellAccessibleClass;
typedef struct _GtkCellAccessiblePrivate GtkCellAccessiblePrivate;
typedef struct _GtkCellAccessible GtkCellAccessible;
typedef struct _GtkCellAccessibleClass GtkCellAccessibleClass;
struct _GtkCellAccessible
{
GtkAccessible parent;
GtkCellAccessiblePrivate *priv;
};
struct _GtkCellAccessibleClass

View File

@@ -29,15 +29,12 @@ G_BEGIN_DECLS
#define GTK_IS_CHECK_MENU_ITEM_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE))
#define GTK_CHECK_MENU_ITEM_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE, GtkCheckMenuItemAccessibleClass))
typedef struct _GtkCheckMenuItemAccessible GtkCheckMenuItemAccessible;
typedef struct _GtkCheckMenuItemAccessibleClass GtkCheckMenuItemAccessibleClass;
typedef struct _GtkCheckMenuItemAccessiblePrivate GtkCheckMenuItemAccessiblePrivate;
typedef struct _GtkCheckMenuItemAccessible GtkCheckMenuItemAccessible;
typedef struct _GtkCheckMenuItemAccessibleClass GtkCheckMenuItemAccessibleClass;
struct _GtkCheckMenuItemAccessible
{
GtkMenuItemAccessible parent;
GtkCheckMenuItemAccessiblePrivate *priv;
};
struct _GtkCheckMenuItemAccessibleClass

View File

@@ -29,15 +29,12 @@ G_BEGIN_DECLS
#define GTK_IS_COLOR_SWATCH_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_COLOR_SWATCH_ACCESSIBLE))
#define GTK_COLOR_SWATCH_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_COLOR_SWATCH_ACCESSIBLE, GtkColorSwatchAccessibleClass))
typedef struct _GtkColorSwatchAccessible GtkColorSwatchAccessible;
typedef struct _GtkColorSwatchAccessibleClass GtkColorSwatchAccessibleClass;
typedef struct _GtkColorSwatchAccessiblePrivate GtkColorSwatchAccessiblePrivate;
typedef struct _GtkColorSwatchAccessible GtkColorSwatchAccessible;
typedef struct _GtkColorSwatchAccessibleClass GtkColorSwatchAccessibleClass;
struct _GtkColorSwatchAccessible
{
GtkWidgetAccessible parent;
GtkColorSwatchAccessiblePrivate *priv;
};
struct _GtkColorSwatchAccessibleClass

View File

@@ -20,12 +20,6 @@
#include <gtk/gtk.h>
#include "gtkcomboboxaccessible.h"
struct _GtkComboBoxAccessiblePrivate
{
gchar *name;
gint old_selection;
gboolean popup_set;
};
static void atk_action_interface_init (AtkActionIface *iface);
static void atk_selection_interface_init (AtkSelectionIface *iface);
@@ -47,9 +41,9 @@ changed_cb (GtkWidget *widget)
index = gtk_combo_box_get_active (combo_box);
obj = gtk_widget_get_accessible (widget);
accessible = GTK_COMBO_BOX_ACCESSIBLE (obj);
if (accessible->priv->old_selection != index)
if (accessible->old_selection != index)
{
accessible->priv->old_selection = index;
accessible->old_selection = index;
g_object_notify (G_OBJECT (obj), "accessible-name");
g_signal_emit_by_name (obj, "selection-changed");
}
@@ -69,13 +63,13 @@ gtk_combo_box_accessible_initialize (AtkObject *obj,
accessible = GTK_COMBO_BOX_ACCESSIBLE (obj);
g_signal_connect (combo_box, "changed", G_CALLBACK (changed_cb), NULL);
accessible->priv->old_selection = gtk_combo_box_get_active (combo_box);
accessible->old_selection = gtk_combo_box_get_active (combo_box);
popup = gtk_combo_box_get_popup_accessible (combo_box);
if (popup)
{
atk_object_set_parent (popup, obj);
accessible->priv->popup_set = TRUE;
accessible->popup_set = TRUE;
}
if (gtk_combo_box_get_has_entry (combo_box))
atk_object_set_parent (gtk_widget_get_accessible (gtk_bin_get_child (GTK_BIN (combo_box))), obj);
@@ -88,7 +82,7 @@ gtk_combo_box_accessible_finalize (GObject *object)
{
GtkComboBoxAccessible *combo_box = GTK_COMBO_BOX_ACCESSIBLE (object);
g_free (combo_box->priv->name);
g_free (combo_box->name);
G_OBJECT_CLASS (_gtk_combo_box_accessible_parent_class)->finalize (object);
}
@@ -126,8 +120,8 @@ gtk_combo_box_accessible_get_name (AtkObject *obj)
gtk_tree_model_get_value (model, &iter, i, &value);
if (G_VALUE_HOLDS_STRING (&value))
{
g_free (accessible->priv->name);
accessible->priv->name = g_strdup (g_value_get_string (&value));
g_free (accessible->name);
accessible->name = g_strdup (g_value_get_string (&value));
g_value_unset (&value);
break;
}
@@ -135,7 +129,7 @@ gtk_combo_box_accessible_get_name (AtkObject *obj)
g_value_unset (&value);
}
}
return accessible->priv->name;
return accessible->name;
}
static gint
@@ -171,10 +165,10 @@ gtk_combo_box_accessible_ref_child (AtkObject *obj,
{
child = gtk_combo_box_get_popup_accessible (GTK_COMBO_BOX (widget));
box = GTK_COMBO_BOX_ACCESSIBLE (obj);
if (!box->priv->popup_set)
if (box->popup_set == FALSE)
{
atk_object_set_parent (child, obj);
box->priv->popup_set = TRUE;
box->popup_set = TRUE;
}
}
else if (i == 1 && gtk_combo_box_get_has_entry (GTK_COMBO_BOX (widget)))
@@ -201,19 +195,14 @@ _gtk_combo_box_accessible_class_init (GtkComboBoxAccessibleClass *klass)
class->get_n_children = gtk_combo_box_accessible_get_n_children;
class->ref_child = gtk_combo_box_accessible_ref_child;
class->initialize = gtk_combo_box_accessible_initialize;
g_type_class_add_private (klass, sizeof (GtkComboBoxAccessiblePrivate));
}
static void
_gtk_combo_box_accessible_init (GtkComboBoxAccessible *combo_box)
{
combo_box->priv = G_TYPE_INSTANCE_GET_PRIVATE (combo_box,
GTK_TYPE_COMBO_BOX_ACCESSIBLE,
GtkComboBoxAccessiblePrivate);
combo_box->priv->old_selection = -1;
combo_box->priv->name = NULL;
combo_box->priv->popup_set = FALSE;
combo_box->old_selection = -1;
combo_box->name = NULL;
combo_box->popup_set = FALSE;
}
static gboolean

View File

@@ -29,15 +29,16 @@ G_BEGIN_DECLS
#define GTK_IS_COMBO_BOX_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_COMBO_BOX_ACCESSIBLE))
#define GTK_COMBO_BOX_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_COMBO_BOX_ACCESSIBLE, GtkComboBoxAccessibleClass))
typedef struct _GtkComboBoxAccessible GtkComboBoxAccessible;
typedef struct _GtkComboBoxAccessibleClass GtkComboBoxAccessibleClass;
typedef struct _GtkComboBoxAccessiblePrivate GtkComboBoxAccessiblePrivate;
typedef struct _GtkComboBoxAccessible GtkComboBoxAccessible;
typedef struct _GtkComboBoxAccessibleClass GtkComboBoxAccessibleClass;
struct _GtkComboBoxAccessible
{
GtkContainerAccessible parent;
GtkComboBoxAccessiblePrivate *priv;
gchar *name;
gint old_selection;
gboolean popup_set;
};
struct _GtkComboBoxAccessibleClass

View File

@@ -20,10 +20,6 @@
#include <gtk/gtk.h>
#include "gtkcontaineraccessible.h"
struct _GtkContainerAccessiblePrivate
{
GList *children;
};
G_DEFINE_TYPE (GtkContainerAccessible, _gtk_container_accessible, GTK_TYPE_WIDGET_ACCESSIBLE)
@@ -38,7 +34,7 @@ gtk_container_accessible_get_n_children (AtkObject* obj)
if (widget == NULL)
return 0;
children = gtk_container_get_children (GTK_CONTAINER (widget));
children = gtk_container_get_children (GTK_CONTAINER(widget));
count = g_list_length (children);
g_list_free (children);
@@ -119,9 +115,9 @@ gtk_container_accessible_real_add_gtk (GtkContainer *container,
accessible = GTK_CONTAINER_ACCESSIBLE (atk_parent);
g_object_notify (G_OBJECT (atk_child), "accessible-parent");
g_list_free (accessible->priv->children);
accessible->priv->children = gtk_container_get_children (container);
index = g_list_index (accessible->priv->children, widget);
g_list_free (accessible->children);
accessible->children = gtk_container_get_children (container);
index = g_list_index (accessible->children, widget);
g_signal_emit_by_name (atk_parent, "children-changed::add", index, atk_child, NULL);
return 1;
@@ -144,10 +140,10 @@ gtk_container_accessible_real_remove_gtk (GtkContainer *container,
accessible = GTK_CONTAINER_ACCESSIBLE (atk_parent);
g_object_notify (G_OBJECT (atk_child), "accessible-parent");
index = g_list_index (accessible->priv->children, widget);
g_list_free (accessible->priv->children);
accessible->priv->children = gtk_container_get_children (container);
if (index >= 0 && index <= g_list_length (accessible->priv->children))
index = g_list_index (accessible->children, widget);
g_list_free (accessible->children);
accessible->children = gtk_container_get_children (container);
if (index >= 0 && index <= g_list_length (accessible->children))
g_signal_emit_by_name (atk_parent, "children-changed::remove", index, atk_child, NULL);
return 1;
@@ -161,7 +157,7 @@ gtk_container_accessible_real_initialize (AtkObject *obj,
ATK_OBJECT_CLASS (_gtk_container_accessible_parent_class)->initialize (obj, data);
accessible->priv->children = gtk_container_get_children (GTK_CONTAINER (data));
accessible->children = gtk_container_get_children (GTK_CONTAINER (data));
g_signal_connect (data, "add", G_CALLBACK (gtk_container_accessible_add_gtk), obj);
g_signal_connect (data, "remove", G_CALLBACK (gtk_container_accessible_remove_gtk), obj);
@@ -174,7 +170,7 @@ gtk_container_accessible_finalize (GObject *object)
{
GtkContainerAccessible *accessible = GTK_CONTAINER_ACCESSIBLE (object);
g_list_free (accessible->priv->children);
g_list_free (accessible->children);
G_OBJECT_CLASS (_gtk_container_accessible_parent_class)->finalize (object);
}
@@ -193,14 +189,10 @@ _gtk_container_accessible_class_init (GtkContainerAccessibleClass *klass)
klass->add_gtk = gtk_container_accessible_real_add_gtk;
klass->remove_gtk = gtk_container_accessible_real_remove_gtk;
g_type_class_add_private (klass, sizeof (GtkContainerAccessiblePrivate));
}
static void
_gtk_container_accessible_init (GtkContainerAccessible *container)
{
container->priv = G_TYPE_INSTANCE_GET_PRIVATE (container,
GTK_TYPE_CONTAINER_ACCESSIBLE,
GtkContainerAccessiblePrivate);
}

View File

@@ -30,15 +30,14 @@ G_BEGIN_DECLS
#define GTK_IS_CONTAINER_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CONTAINER_ACCESSIBLE))
#define GTK_CONTAINER_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CONTAINER_ACCESSIBLE, GtkContainerAccessibleClass))
typedef struct _GtkContainerAccessible GtkContainerAccessible;
typedef struct _GtkContainerAccessibleClass GtkContainerAccessibleClass;
typedef struct _GtkContainerAccessiblePrivate GtkContainerAccessiblePrivate;
typedef struct _GtkContainerAccessible GtkContainerAccessible;
typedef struct _GtkContainerAccessibleClass GtkContainerAccessibleClass;
struct _GtkContainerAccessible
{
GtkWidgetAccessible parent;
GtkContainerAccessiblePrivate *priv;
GList *children;
};
struct _GtkContainerAccessibleClass

View File

@@ -20,11 +20,6 @@
#include <gtk/gtk.h>
#include "gtkcontainercellaccessible.h"
struct _GtkContainerCellAccessiblePrivate
{
GList *children;
gint n_children;
};
G_DEFINE_TYPE (GtkContainerCellAccessible, _gtk_container_cell_accessible, GTK_TYPE_CELL_ACCESSIBLE)
@@ -34,7 +29,7 @@ gtk_container_cell_accessible_finalize (GObject *obj)
{
GtkContainerCellAccessible *container = GTK_CONTAINER_CELL_ACCESSIBLE (obj);
g_list_free_full (container->priv->children, g_object_unref);
g_list_free_full (container->children, g_object_unref);
G_OBJECT_CLASS (_gtk_container_cell_accessible_parent_class)->finalize (obj);
}
@@ -45,7 +40,7 @@ gtk_container_cell_accessible_get_n_children (AtkObject *obj)
{
GtkContainerCellAccessible *cell = GTK_CONTAINER_CELL_ACCESSIBLE (obj);
return cell->priv->n_children;
return cell->NChildren;
}
static AtkObject *
@@ -55,7 +50,7 @@ gtk_container_cell_accessible_ref_child (AtkObject *obj,
GtkContainerCellAccessible *cell = GTK_CONTAINER_CELL_ACCESSIBLE (obj);
GList *l;
l = g_list_nth (cell->priv->children, child);
l = g_list_nth (cell->children, child);
if (l == NULL)
return NULL;
@@ -68,7 +63,7 @@ gtk_container_cell_accessible_update_cache (GtkCellAccessible *cell)
GtkContainerCellAccessible *container = GTK_CONTAINER_CELL_ACCESSIBLE (cell);
GList *l;
for (l = container->priv->children; l; l = l->next)
for (l = container->children; l; l = l->next)
{
_gtk_cell_accessible_update_cache (l->data);
}
@@ -80,7 +75,7 @@ gtk_container_cell_widget_set (GtkAccessible *accessible)
GtkContainerCellAccessible *container = GTK_CONTAINER_CELL_ACCESSIBLE (accessible);
GList *l;
for (l = container->priv->children; l; l = l->next)
for (l = container->children; l; l = l->next)
{
gtk_accessible_set_widget (l->data, gtk_accessible_get_widget (accessible));
}
@@ -94,7 +89,7 @@ gtk_container_cell_widget_unset (GtkAccessible *accessible)
GtkContainerCellAccessible *container = GTK_CONTAINER_CELL_ACCESSIBLE (accessible);
GList *l;
for (l = container->priv->children; l; l = l->next)
for (l = container->children; l; l = l->next)
{
gtk_accessible_set_widget (l->data, NULL);
}
@@ -119,28 +114,31 @@ _gtk_container_cell_accessible_class_init (GtkContainerCellAccessibleClass *klas
accessible_class->widget_unset = gtk_container_cell_widget_unset;
cell_class->update_cache = gtk_container_cell_accessible_update_cache;
g_type_class_add_private (g_object_class, sizeof (GtkContainerCellAccessiblePrivate));
}
static void
_gtk_container_cell_accessible_init (GtkContainerCellAccessible *cell)
{
cell->priv = G_TYPE_INSTANCE_GET_PRIVATE (cell,
GTK_TYPE_CONTAINER_CELL_ACCESSIBLE,
GtkContainerCellAccessiblePrivate);
}
GtkContainerCellAccessible *
_gtk_container_cell_accessible_new (void)
{
GObject *object;
AtkObject *atk_object;
GtkContainerCellAccessible *container;
object = g_object_new (GTK_TYPE_CONTAINER_CELL_ACCESSIBLE, NULL);
ATK_OBJECT (object)->role = ATK_ROLE_TABLE_CELL;
g_return_val_if_fail (object != NULL, NULL);
return GTK_CONTAINER_CELL_ACCESSIBLE (object);
atk_object = ATK_OBJECT (object);
atk_object->role = ATK_ROLE_TABLE_CELL;
container = GTK_CONTAINER_CELL_ACCESSIBLE (object);
container->children = NULL;
container->NChildren = 0;
return container;
}
void
@@ -150,8 +148,8 @@ _gtk_container_cell_accessible_add_child (GtkContainerCellAccessible *container,
g_return_if_fail (GTK_IS_CONTAINER_CELL_ACCESSIBLE (container));
g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (child));
container->priv->n_children++;
container->priv->children = g_list_append (container->priv->children, child);
container->NChildren++;
container->children = g_list_append (container->children, child);
atk_object_set_parent (ATK_OBJECT (child), ATK_OBJECT (container));
}
@@ -161,16 +159,8 @@ _gtk_container_cell_accessible_remove_child (GtkContainerCellAccessible *contain
{
g_return_if_fail (GTK_IS_CONTAINER_CELL_ACCESSIBLE (container));
g_return_if_fail (GTK_IS_CELL_ACCESSIBLE (child));
g_return_if_fail (container->priv->n_children > 0);
g_return_if_fail (container->NChildren > 0);
container->priv->children = g_list_remove (container->priv->children, child);
container->priv->n_children--;
}
GList *
_gtk_container_cell_accessible_get_children (GtkContainerCellAccessible *container)
{
g_return_val_if_fail (GTK_IS_CONTAINER_CELL_ACCESSIBLE (container), NULL);
return container->priv->children;
container->children = g_list_remove (container->children, child);
container->NChildren--;
}

View File

@@ -30,15 +30,14 @@ G_BEGIN_DECLS
#define GTK_IS_CONTAINER_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CONTAINER_CELL_ACCESSIBLE))
#define GTK_CONTAINER_CELL_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CONTAINER_CELL_ACCESSIBLE, GtkContainerCellAccessibleClass))
typedef struct _GtkContainerCellAccessible GtkContainerCellAccessible;
typedef struct _GtkContainerCellAccessibleClass GtkContainerCellAccessibleClass;
typedef struct _GtkContainerCellAccessiblePrivate GtkContainerCellAccessiblePrivate;
typedef struct _GtkContainerCellAccessible GtkContainerCellAccessible;
typedef struct _GtkContainerCellAccessibleClass GtkContainerCellAccessibleClass;
struct _GtkContainerCellAccessible
{
GtkCellAccessible parent;
GtkContainerCellAccessiblePrivate *priv;
GList *children;
gint NChildren;
};
struct _GtkContainerCellAccessibleClass
@@ -53,7 +52,6 @@ void _gtk_container_cell_accessible_add_child (GtkCont
GtkCellAccessible *child);
void _gtk_container_cell_accessible_remove_child (GtkContainerCellAccessible *container,
GtkCellAccessible *child);
GList *_gtk_container_cell_accessible_get_children (GtkContainerCellAccessible *container);
G_END_DECLS

View File

@@ -17,351 +17,12 @@
#include "config.h"
#include <string.h>
#include <gtk/gtk.h>
#include "gtkpango.h"
#include "gtkentryaccessible.h"
#include "gtkentryprivate.h"
#include "gtkcomboboxaccessible.h"
#define GTK_TYPE_ENTRY_ICON_ACCESSIBLE (_gtk_entry_icon_accessible_get_type ())
#define GTK_ENTRY_ICON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ENTRY_ICON_ACCESSIBLE, GtkEntryIconAccessible))
#define GTK_IS_ENTRY_ICON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ENTRY_ICON_ACCESSIBLE))
struct _GtkEntryAccessiblePrivate
{
gint cursor_position;
gint selection_bound;
AtkObject *icons[2];
};
typedef struct _GtkEntryIconAccessible GtkEntryIconAccessible;
typedef struct _GtkEntryIconAccessibleClass GtkEntryIconAccessibleClass;
struct _GtkEntryIconAccessible
{
AtkObject parent;
GtkEntryAccessible *entry;
GtkEntryIconPosition pos;
};
struct _GtkEntryIconAccessibleClass
{
AtkObjectClass parent_class;
};
static void atk_action_interface_init (AtkActionIface *iface);
static void icon_atk_action_interface_init (AtkActionIface *iface);
static void icon_atk_component_interface_init (AtkComponentIface *iface);
GType _gtk_entry_icon_accessible_get_type (void);
G_DEFINE_TYPE_WITH_CODE (GtkEntryIconAccessible, _gtk_entry_icon_accessible, ATK_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, icon_atk_action_interface_init)
G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, icon_atk_component_interface_init))
static void
gtk_entry_icon_accessible_remove_entry (gpointer data, GObject *obj)
{
GtkEntryIconAccessible *icon = data;
if (icon->entry)
{
icon->entry = NULL;
g_object_notify (G_OBJECT (icon), "accessible-parent");
atk_object_notify_state_change (ATK_OBJECT (icon), ATK_STATE_DEFUNCT, TRUE);
}
}
static AtkObject *
gtk_entry_icon_accessible_new (GtkEntryAccessible *entry,
GtkEntryIconPosition pos)
{
GtkEntryIconAccessible *icon;
AtkObject *accessible;
icon = g_object_new (_gtk_entry_icon_accessible_get_type (), NULL);
icon->entry = entry;
g_object_weak_ref (G_OBJECT (entry),
gtk_entry_icon_accessible_remove_entry,
icon);
icon->pos = pos;
accessible = ATK_OBJECT (icon);
atk_object_initialize (accessible, NULL);
return accessible;
}
static void
_gtk_entry_icon_accessible_init (GtkEntryIconAccessible *icon)
{
}
static void
gtk_entry_icon_accessible_initialize (AtkObject *obj,
gpointer data)
{
GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (obj);
GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry));
GtkEntry *gtk_entry = GTK_ENTRY (widget);
const gchar *name;
gchar *text;
ATK_OBJECT_CLASS (_gtk_entry_icon_accessible_parent_class)->initialize (obj, data);
atk_object_set_role (obj, ATK_ROLE_ICON);
name = gtk_entry_get_icon_name (gtk_entry, icon->pos);
if (name)
atk_object_set_name (obj, name);
text = gtk_entry_get_icon_tooltip_text (gtk_entry, icon->pos);
if (text)
{
atk_object_set_description (obj, text);
g_free (text);
}
atk_object_set_parent (obj, ATK_OBJECT (icon->entry));
}
static AtkObject *
gtk_entry_icon_accessible_get_parent (AtkObject *accessible)
{
GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (accessible);
return ATK_OBJECT (icon->entry);
}
static AtkStateSet *
gtk_entry_icon_accessible_ref_state_set (AtkObject *accessible)
{
GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (accessible);
AtkStateSet *set = atk_state_set_new ();
AtkStateSet *entry_set;
GtkWidget *widget;
GtkEntry *gtk_entry;
if (!icon->entry)
{
atk_state_set_add_state (set, ATK_STATE_DEFUNCT);
return set;
}
entry_set = atk_object_ref_state_set (ATK_OBJECT (icon->entry));
if (!entry_set || atk_state_set_contains_state (entry_set, ATK_STATE_DEFUNCT))
{
atk_state_set_add_state (set, ATK_STATE_DEFUNCT);
g_clear_object (&entry_set);
return set;
}
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry));
gtk_entry = GTK_ENTRY (widget);
if (atk_state_set_contains_state (entry_set, ATK_STATE_ENABLED))
atk_state_set_add_state (set, ATK_STATE_ENABLED);
if (atk_state_set_contains_state (entry_set, ATK_STATE_SENSITIVE))
atk_state_set_add_state (set, ATK_STATE_SENSITIVE);
if (atk_state_set_contains_state (entry_set, ATK_STATE_SHOWING))
atk_state_set_add_state (set, ATK_STATE_SHOWING);
if (atk_state_set_contains_state (entry_set, ATK_STATE_VISIBLE))
atk_state_set_add_state (set, ATK_STATE_VISIBLE);
if (!gtk_entry_get_icon_sensitive (gtk_entry, icon->pos))
atk_state_set_remove_state (set, ATK_STATE_SENSITIVE);
if (!gtk_entry_get_icon_activatable (gtk_entry, icon->pos))
atk_state_set_remove_state (set, ATK_STATE_ENABLED);
g_object_unref (entry_set);
return set;
}
static void
gtk_entry_icon_accessible_invalidate (GtkEntryIconAccessible *icon)
{
if (!icon->entry)
return;
g_object_weak_unref (G_OBJECT (icon->entry),
gtk_entry_icon_accessible_remove_entry,
icon);
gtk_entry_icon_accessible_remove_entry (icon, NULL);
}
static void
gtk_entry_icon_accessible_finalize (GObject *object)
{
GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (object);
gtk_entry_icon_accessible_invalidate (icon);
G_OBJECT_CLASS (_gtk_entry_icon_accessible_parent_class)->finalize (object);
}
static void
_gtk_entry_icon_accessible_class_init (GtkEntryIconAccessibleClass *klass)
{
AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
atk_class->initialize = gtk_entry_icon_accessible_initialize;
atk_class->get_parent = gtk_entry_icon_accessible_get_parent;
atk_class->ref_state_set = gtk_entry_icon_accessible_ref_state_set;
gobject_class->finalize = gtk_entry_icon_accessible_finalize;
}
static gboolean
gtk_entry_icon_accessible_do_action (AtkAction *action,
gint i)
{
GtkEntryIconAccessible *icon = (GtkEntryIconAccessible *)action;
GtkWidget *widget;
GtkEntry *gtk_entry;
GdkEvent event;
GdkRectangle icon_area;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry));
if (widget == NULL)
return FALSE;
if (i != 0)
return FALSE;
if (!gtk_widget_is_sensitive (widget) || !gtk_widget_get_visible (widget))
return FALSE;
gtk_entry = GTK_ENTRY (widget);
if (!gtk_entry_get_icon_sensitive (gtk_entry, icon->pos) ||
!gtk_entry_get_icon_activatable (gtk_entry, icon->pos))
return FALSE;
gtk_entry_get_icon_area (gtk_entry, icon->pos, &icon_area);
memset (&event, 0, sizeof (event));
event.button.type = GDK_BUTTON_PRESS;
event.button.window = gtk_widget_get_window (widget);
event.button.button = 1;
event.button.send_event = TRUE;
event.button.time = GDK_CURRENT_TIME;
event.button.x = icon_area.x;
event.button.y = icon_area.y;
g_signal_emit_by_name (widget, "icon-press", 0, icon->pos, &event);
return TRUE;
}
static gint
gtk_entry_icon_accessible_get_n_actions (AtkAction *action)
{
GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (action);
GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry));
GtkEntry *gtk_entry = GTK_ENTRY (widget);
return (gtk_entry_get_icon_activatable (gtk_entry, icon->pos) ? 1 : 0);
}
static const gchar *
gtk_entry_icon_accessible_get_name (AtkAction *action,
gint i)
{
GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (action);
GtkWidget *widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry));
GtkEntry *gtk_entry = GTK_ENTRY (widget);
if (i != 0)
return NULL;
if (!gtk_entry_get_icon_activatable (gtk_entry, icon->pos))
return NULL;
return "activate";
}
static void
icon_atk_action_interface_init (AtkActionIface *iface)
{
iface->do_action = gtk_entry_icon_accessible_do_action;
iface->get_n_actions = gtk_entry_icon_accessible_get_n_actions;
iface->get_name = gtk_entry_icon_accessible_get_name;
}
static void
gtk_entry_icon_accessible_get_extents (AtkComponent *component,
gint *x,
gint *y,
gint *width,
gint *height,
AtkCoordType coord_type)
{
GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (component);
GdkRectangle icon_area;
GtkEntry *gtk_entry;
GtkWidget *widget;
*x = G_MININT;
atk_component_get_extents (ATK_COMPONENT (icon->entry), x, y, width, height,
coord_type);
if (*x == G_MININT)
return;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry));
gtk_entry = GTK_ENTRY (widget);
gtk_entry_get_icon_area (gtk_entry, icon->pos, &icon_area);
*width = icon_area.width;
*height = icon_area.height;
*x += icon_area.x;
*y += icon_area.y;
}
static void
gtk_entry_icon_accessible_get_position (AtkComponent *component,
gint *x,
gint *y,
AtkCoordType coord_type)
{
GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (component);
GdkRectangle icon_area;
GtkEntry *gtk_entry;
GtkWidget *widget;
*x = G_MININT;
atk_component_get_position (ATK_COMPONENT (icon->entry), x, y, coord_type);
if (*x == G_MININT)
return;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry));
gtk_entry = GTK_ENTRY (widget);
gtk_entry_get_icon_area (gtk_entry, icon->pos, &icon_area);
*x += icon_area.x;
*y += icon_area.y;
}
static void
gtk_entry_icon_accessible_get_size (AtkComponent *component,
gint *width,
gint *height)
{
GtkEntryIconAccessible *icon = GTK_ENTRY_ICON_ACCESSIBLE (component);
GdkRectangle icon_area;
GtkEntry *gtk_entry;
GtkWidget *widget;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (icon->entry));
gtk_entry = GTK_ENTRY (widget);
gtk_entry_get_icon_area (gtk_entry, icon->pos, &icon_area);
*width = icon_area.width;
*height = icon_area.height;
}
static void
icon_atk_component_interface_init (AtkComponentIface *iface)
{
iface->get_extents = gtk_entry_icon_accessible_get_extents;
iface->get_size = gtk_entry_icon_accessible_get_size;
iface->get_position = gtk_entry_icon_accessible_get_position;
}
/* Callbacks */
static void insert_text_cb (GtkEditable *editable,
@@ -448,9 +109,10 @@ gtk_entry_accessible_initialize (AtkObject *obj,
gtk_entry_accessible = GTK_ENTRY_ACCESSIBLE (obj);
entry = GTK_ENTRY (data);
gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start_pos, &end_pos);
gtk_entry_accessible->priv->cursor_position = end_pos;
gtk_entry_accessible->priv->selection_bound = start_pos;
gtk_editable_get_selection_bounds (GTK_EDITABLE (entry),
&start_pos, &end_pos);
gtk_entry_accessible->cursor_position = end_pos;
gtk_entry_accessible->selection_bound = start_pos;
/* Set up signal callbacks */
g_signal_connect (entry, "insert-text", G_CALLBACK (insert_text_cb), NULL);
@@ -470,13 +132,11 @@ gtk_entry_accessible_notify_gtk (GObject *obj,
AtkObject* atk_obj;
GtkEntry* gtk_entry;
GtkEntryAccessible* entry;
GtkEntryAccessiblePrivate *priv;
widget = GTK_WIDGET (obj);
atk_obj = gtk_widget_get_accessible (widget);
gtk_entry = GTK_ENTRY (widget);
entry = GTK_ENTRY_ACCESSIBLE (atk_obj);
priv = entry->priv;
if (g_strcmp0 (pspec->name, "cursor-position") == 0)
{
@@ -486,7 +146,7 @@ gtk_entry_accessible_notify_gtk (GObject *obj,
* The entry cursor position has moved so generate the signal.
*/
g_signal_emit_by_name (atk_obj, "text-caret-moved",
entry->priv->cursor_position);
entry->cursor_position);
}
else if (g_strcmp0 (pspec->name, "selection-bound") == 0)
{
@@ -509,119 +169,6 @@ gtk_entry_accessible_notify_gtk (GObject *obj,
new_role = visibility ? ATK_ROLE_TEXT : ATK_ROLE_PASSWORD_TEXT;
atk_object_set_role (atk_obj, new_role);
}
else if (g_strcmp0 (pspec->name, "primary-icon-storage-type") == 0)
{
if (gtk_entry_get_icon_storage_type (gtk_entry, GTK_ENTRY_ICON_PRIMARY) != GTK_IMAGE_EMPTY && !priv->icons[GTK_ENTRY_ICON_PRIMARY])
{
priv->icons[GTK_ENTRY_ICON_PRIMARY] = gtk_entry_icon_accessible_new (entry, GTK_ENTRY_ICON_PRIMARY);
g_signal_emit_by_name (entry, "children-changed::add", 0,
priv->icons[GTK_ENTRY_ICON_PRIMARY], NULL);
}
else if (gtk_entry_get_icon_storage_type (gtk_entry, GTK_ENTRY_ICON_PRIMARY) == GTK_IMAGE_EMPTY && priv->icons[GTK_ENTRY_ICON_PRIMARY])
{
gtk_entry_icon_accessible_invalidate (GTK_ENTRY_ICON_ACCESSIBLE (priv->icons[GTK_ENTRY_ICON_PRIMARY]));
g_signal_emit_by_name (entry, "children-changed::remove", 0,
priv->icons[GTK_ENTRY_ICON_PRIMARY], NULL);
g_clear_object (&priv->icons[GTK_ENTRY_ICON_PRIMARY]);
}
}
else if (g_strcmp0 (pspec->name, "secondary-icon-storage-type") == 0)
{
gint index = (priv->icons[GTK_ENTRY_ICON_PRIMARY] ? 1 : 0);
if (gtk_entry_get_icon_storage_type (gtk_entry, GTK_ENTRY_ICON_SECONDARY) != GTK_IMAGE_EMPTY && !priv->icons[GTK_ENTRY_ICON_SECONDARY])
{
priv->icons[GTK_ENTRY_ICON_SECONDARY] = gtk_entry_icon_accessible_new (entry, GTK_ENTRY_ICON_SECONDARY);
g_signal_emit_by_name (entry, "children-changed::add", index,
priv->icons[GTK_ENTRY_ICON_SECONDARY], NULL);
}
else if (gtk_entry_get_icon_storage_type (gtk_entry, GTK_ENTRY_ICON_SECONDARY) == GTK_IMAGE_EMPTY && priv->icons[GTK_ENTRY_ICON_SECONDARY])
{
gtk_entry_icon_accessible_invalidate (GTK_ENTRY_ICON_ACCESSIBLE (priv->icons[GTK_ENTRY_ICON_SECONDARY]));
g_signal_emit_by_name (entry, "children-changed::remove", index,
priv->icons[GTK_ENTRY_ICON_SECONDARY], NULL);
g_clear_object (&priv->icons[GTK_ENTRY_ICON_SECONDARY]);
}
}
else if (g_strcmp0 (pspec->name, "primary-icon-name") == 0)
{
if (priv->icons[GTK_ENTRY_ICON_PRIMARY])
{
const gchar *name;
name = gtk_entry_get_icon_name (gtk_entry,
GTK_ENTRY_ICON_PRIMARY);
atk_object_set_name (priv->icons[GTK_ENTRY_ICON_PRIMARY], name);
}
}
else if (g_strcmp0 (pspec->name, "secondary-icon-name") == 0)
{
if (priv->icons[GTK_ENTRY_ICON_SECONDARY])
{
const gchar *name;
name = gtk_entry_get_icon_name (gtk_entry,
GTK_ENTRY_ICON_SECONDARY);
atk_object_set_name (priv->icons[GTK_ENTRY_ICON_SECONDARY], name);
}
}
else if (g_strcmp0 (pspec->name, "primary-icon-tooltip-text") == 0)
{
if (priv->icons[GTK_ENTRY_ICON_PRIMARY])
{
gchar *text;
text = gtk_entry_get_icon_tooltip_text (gtk_entry,
GTK_ENTRY_ICON_PRIMARY);
atk_object_set_description (priv->icons[GTK_ENTRY_ICON_PRIMARY],
text);
g_free (text);
}
}
else if (g_strcmp0 (pspec->name, "secondary-icon-tooltip-text") == 0)
{
if (priv->icons[GTK_ENTRY_ICON_SECONDARY])
{
gchar *text;
text = gtk_entry_get_icon_tooltip_text (gtk_entry,
GTK_ENTRY_ICON_SECONDARY);
atk_object_set_description (priv->icons[GTK_ENTRY_ICON_SECONDARY],
text);
g_free (text);
}
}
else if (g_strcmp0 (pspec->name, "primary-icon-activatable") == 0)
{
if (priv->icons[GTK_ENTRY_ICON_PRIMARY])
{
gboolean on = gtk_entry_get_icon_activatable (gtk_entry, GTK_ENTRY_ICON_PRIMARY);
atk_object_notify_state_change (priv->icons[GTK_ENTRY_ICON_PRIMARY],
ATK_STATE_ENABLED, on);
}
}
else if (g_strcmp0 (pspec->name, "secondary-icon-activatable") == 0)
{
if (priv->icons[GTK_ENTRY_ICON_SECONDARY])
{
gboolean on = gtk_entry_get_icon_activatable (gtk_entry, GTK_ENTRY_ICON_SECONDARY);
atk_object_notify_state_change (priv->icons[GTK_ENTRY_ICON_SECONDARY],
ATK_STATE_ENABLED, on);
}
}
else if (g_strcmp0 (pspec->name, "primary-icon-sensitive") == 0)
{
if (priv->icons[GTK_ENTRY_ICON_PRIMARY])
{
gboolean on = gtk_entry_get_icon_sensitive (gtk_entry, GTK_ENTRY_ICON_PRIMARY);
atk_object_notify_state_change (priv->icons[GTK_ENTRY_ICON_PRIMARY],
ATK_STATE_SENSITIVE, on);
}
}
else if (g_strcmp0 (pspec->name, "secondary-icon-sensitive") == 0)
{
if (priv->icons[GTK_ENTRY_ICON_SECONDARY])
{
gboolean on = gtk_entry_get_icon_sensitive (gtk_entry, GTK_ENTRY_ICON_SECONDARY);
atk_object_notify_state_change (priv->icons[GTK_ENTRY_ICON_SECONDARY],
ATK_STATE_SENSITIVE, on);
}
}
else
GTK_WIDGET_ACCESSIBLE_CLASS (_gtk_entry_accessible_parent_class)->notify_gtk (obj, pspec);
}
@@ -640,109 +187,25 @@ gtk_entry_accessible_get_index_in_parent (AtkObject *accessible)
return ATK_OBJECT_CLASS (_gtk_entry_accessible_parent_class)->get_index_in_parent (accessible);
}
static gint
gtk_entry_accessible_get_n_children (AtkObject* obj)
{
GtkWidget *widget;
GtkEntry *entry;
gint count = 0;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
if (widget == NULL)
return 0;
entry = GTK_ENTRY (widget);
if (gtk_entry_get_icon_storage_type (entry, GTK_ENTRY_ICON_PRIMARY) != GTK_IMAGE_EMPTY)
count++;
if (gtk_entry_get_icon_storage_type (entry, GTK_ENTRY_ICON_SECONDARY) != GTK_IMAGE_EMPTY)
count++;
return count;
}
static AtkObject *
gtk_entry_accessible_ref_child (AtkObject *obj,
gint i)
{
GtkEntryAccessible *accessible = GTK_ENTRY_ACCESSIBLE (obj);
GtkEntryAccessiblePrivate *priv = accessible->priv;
GtkWidget *widget;
GtkEntry *entry;
GtkEntryIconPosition pos;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj));
if (widget == NULL)
return NULL;
entry = GTK_ENTRY (widget);
switch (i)
{
case 0:
if (gtk_entry_get_icon_storage_type (entry, GTK_ENTRY_ICON_PRIMARY) != GTK_IMAGE_EMPTY)
pos = GTK_ENTRY_ICON_PRIMARY;
else if (gtk_entry_get_icon_storage_type (entry, GTK_ENTRY_ICON_SECONDARY) != GTK_IMAGE_EMPTY)
pos = GTK_ENTRY_ICON_SECONDARY;
else
return NULL;
break;
case 1:
if (gtk_entry_get_icon_storage_type (entry, GTK_ENTRY_ICON_PRIMARY) == GTK_IMAGE_EMPTY)
return NULL;
if (gtk_entry_get_icon_storage_type (entry, GTK_ENTRY_ICON_SECONDARY) == GTK_IMAGE_EMPTY)
return NULL;
pos = GTK_ENTRY_ICON_SECONDARY;
break;
default:
return NULL;
}
if (!priv->icons[pos])
priv->icons[pos] = gtk_entry_icon_accessible_new (accessible, pos);
return g_object_ref (priv->icons[pos]);
}
static void
gtk_entry_accessible_finalize (GObject *object)
{
GtkEntryAccessible *entry = GTK_ENTRY_ACCESSIBLE (object);
GtkEntryAccessiblePrivate *priv = entry->priv;
g_clear_object (&priv->icons[GTK_ENTRY_ICON_PRIMARY]);
g_clear_object (&priv->icons[GTK_ENTRY_ICON_SECONDARY]);
G_OBJECT_CLASS (_gtk_entry_accessible_parent_class)->finalize (object);
}
static void
_gtk_entry_accessible_class_init (GtkEntryAccessibleClass *klass)
{
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
class->ref_state_set = gtk_entry_accessible_ref_state_set;
class->get_index_in_parent = gtk_entry_accessible_get_index_in_parent;
class->initialize = gtk_entry_accessible_initialize;
class->get_attributes = gtk_entry_accessible_get_attributes;
class->get_n_children = gtk_entry_accessible_get_n_children;
class->ref_child = gtk_entry_accessible_ref_child;
widget_class->notify_gtk = gtk_entry_accessible_notify_gtk;
gobject_class->finalize = gtk_entry_accessible_finalize;
g_type_class_add_private (klass, sizeof (GtkEntryAccessiblePrivate));
}
static void
_gtk_entry_accessible_init (GtkEntryAccessible *entry)
{
entry->priv = G_TYPE_INSTANCE_GET_PRIVATE (entry,
GTK_TYPE_ENTRY_ACCESSIBLE,
GtkEntryAccessiblePrivate);
entry->priv->cursor_position = 0;
entry->priv->selection_bound = 0;
entry->cursor_position = 0;
entry->selection_bound = 0;
}
static gchar *
@@ -1426,8 +889,8 @@ check_for_selection_change (GtkEntryAccessible *accessible,
if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start, &end))
{
if (end != accessible->priv->cursor_position ||
start != accessible->priv->selection_bound)
if (end != accessible->cursor_position ||
start != accessible->selection_bound)
/*
* This check is here as this function can be called
* for notification of selection_bound and current_pos.
@@ -1440,11 +903,11 @@ check_for_selection_change (GtkEntryAccessible *accessible,
else
{
/* We had a selection */
ret_val = (accessible->priv->cursor_position != accessible->priv->selection_bound);
ret_val = (accessible->cursor_position != accessible->selection_bound);
}
accessible->priv->cursor_position = end;
accessible->priv->selection_bound = start;
accessible->cursor_position = end;
accessible->selection_bound = start;
return ret_val;
}

Some files were not shown because too many files have changed in this diff Show More