Compare commits

..

98 Commits

Author SHA1 Message Date
Benjamin Otte 77a059162b xxx: progressbar 2013-01-05 20:19:10 +01:00
Benjamin Otte 3bbe53689a widget: Marshal size allocation to actor 2013-01-05 20:19:09 +01:00
Benjamin Otte 0d60250917 widget: Make size-request vfuncs call into actor code 2013-01-05 20:19:09 +01:00
Benjamin Otte cb31648aa3 cssmatcher: Redo the fallback detection
We need to do the fallback detection when we initialize the matcher, not
when we first decide what matcher to create. This is necessary to be
able to switch from actor matching to widget path matching for
submatchers.
2013-01-05 20:19:09 +01:00
Benjamin Otte 2081d36e88 widget: Use the actor's style context. 2013-01-05 20:19:09 +01:00
Benjamin Otte 37fa22c608 widget: Add a private accessor for the widget's actor
This is necessary to port widgets to actors.
2013-01-05 20:15:17 +01:00
Benjamin Otte a137e66648 actor: Add a screen_changed vfunc
... and call it from GtkWidgetActor, when the screen changes.
2013-01-05 20:15:17 +01:00
Benjamin Otte 8c8a0e1bd6 widget: Put the widget's name into the actor
Use GtkCssBox::id instead of keeping a copy in the GtkWidgetPrivate.
2013-01-05 20:15:17 +01:00
Benjamin Otte fe956e983c widget: Add a base actor
Use that actor for tracking the realized, visible and mapped states.
2013-01-05 20:15:17 +01:00
Benjamin Otte 17cb423a71 actors: Add a custom subclass for the base widget actor
This custom class needs to do all the hacks that are necessary because
of the interaction with GtkWidget. The class should be removed with GTK
4.
2013-01-05 20:15:16 +01:00
Benjamin Otte 49a6d85310 binlayout: Add API needed for progressbars
We need the ability to set size and position with more granularity than
align and expand flags give us for things like:
(1) sliders
(2) progress indicators
(3) panes
(4) dragged actors (like the switch slider)

... and until we have a good way to do that, this should suffice.
2013-01-05 20:15:16 +01:00
Benjamin Otte 2f691d4097 widget: Get rid of direct struct access
... to visible, realized and mapped members and replace it with the
function calls doing the same thing.
2013-01-05 20:15:16 +01:00
Benjamin Otte 46570d6a76 actors: Make GtkCssActor a style context source
... and add a style_updated signal.
2013-01-05 20:15:16 +01:00
Benjamin Otte f7ef7c11d3 css: Add a matcher for actors. 2013-01-05 20:15:16 +01:00
Benjamin Otte e84af768f9 stylecontext: Change css matcher initialization
2 changes:
(1) Add an optional css_matcher_init vfunc
(2) Allow create_query_path vfunc to fail

Both of these are required for the actors work.
2013-01-05 20:15:16 +01:00
Benjamin Otte e6f5e4e448 actors: Add GtkCssText
An actor for displaying text. Essentiall it's a PangoLayout moving
around on screen.
2013-01-05 20:15:16 +01:00
Benjamin Otte bbe48d8144 actors: Add GtkCssBox
GtkCssBox is an actor that does 2 things:
(1) It manages the styles
(2) It implements the CSS box model and provides for margin, padding and
    border

And with this, GtkCssBox will be pretty much the most important layout
element when creating widgets.
2013-01-05 20:15:15 +01:00
Benjamin Otte ce2c4b2de0 actors: Add GtkCssActor
GtkCssActor is an actor maintaining a reference to a style context. It
is not owning the style context though.

The actor owning a style context is GtkCssBox, which is now a subclass
of GtkCssActor.
2013-01-05 20:15:15 +01:00
Benjamin Otte cc86c700eb actors: Add GtkBinLayout
Also mostly copied from Clutter - at least in name and function.
2013-01-05 20:15:15 +01:00
Benjamin Otte ec4516264b actors: First batch of ClutterActor copy/paste
This is the first set of stuff needed for an actor implementation. It
implements size request and allocate, positioning, drawing, the usual
show/realize/map cycle and layout managers
2013-01-05 20:15:15 +01:00
Benjamin Otte d85dacd40c actors: Add skeleton build logic for actors directory
Copyright is added from ClutterActor, as that's where I intend to grab a
bunch of code from.
2013-01-04 13:09:48 +01:00
Benjamin Otte 99e9dc83fa css: Add min/max-width/height CSS properties
Nothing is using them yet.
2013-01-04 13:09:47 +01:00
Benjamin Otte 55f3ad0bf3 sizerequestcache: Store floats instead of ints
This is in preparation for the GtkActor work.
2013-01-04 13:09:47 +01:00
Benjamin Otte 38df4155b7 stylecontext: Make the source provide a vtable
This way, the code looks a bit cleaner (and way more like C++, ahem).
But most of all, this prepares for GtkActor, which will be yet another
source.
2013-01-04 13:09:47 +01:00
Rūdolfs Mazurs 5474259dea Updated Latvian translation 2012-12-30 15:49:29 +02:00
Baurzhan Muftakhidinov fa1dc252df Updated Kazakh translation 2012-12-29 23:41:57 +06:00
Balázs Úr c50bcf5891 Updated Hungarian translation 2012-12-29 16:24:29 +01:00
Benjamin Otte 6b9b925add widget: Fix initial state flags for RTL 2012-12-29 02:33:14 +01:00
Benjamin Otte 3e979d911b widget: Fix state propagation code
Previously, with STATE_FLAGS_REPLACE we would unset _all_ the state
flags on children, not just the ones that do propagate. This caused the
RTL/LTR flags to get lost.
2012-12-29 02:24:27 +01:00
Benjamin Otte b068b18c78 menu: Huh?
What was that code supposed to achieve? Why are we unsetting flags that
might be useful?
2012-12-29 02:07:09 +01:00
Benjamin Otte cc986fdc1c widget: Remove underscore prefix from static function 2012-12-29 02:06:51 +01:00
Benjamin Otte b39bb4400e progressbar: Store activity position as percentage
... instead of in absolute pixels.
2012-12-29 01:00:15 +01:00
Benjamin Otte 02b440b466 progressbar: Remove activity_step from private struct
It's only used locally, so use a local variable
2012-12-29 01:00:15 +01:00
Khaled Hosny 6a229fe50a Typo 2012-12-28 20:32:40 +02:00
Matthias Clasen 5adecf183b Move single-include guards inside include guards
gcc has optimizations for include guards that only work
if they are outermost in the the header.
https://bugzilla.gnome.org/show_bug.cgi?id=689810
2012-12-28 09:57:56 -05:00
Arash Mousavi 4d4b6a8658 l10n: Updated Persian translation 2012-12-28 12:05:42 +03:30
Alexander Larsson ec45d2f8c7 broadway: Handle NULL surface in update
This happen if nothing has been drawn yet.
2012-12-27 22:56:04 +01:00
Alexander Larsson e00bc73de8 broadway: Rename gdkbroadway-server-client.c to gdkbroadway-server.c 2012-12-27 22:56:04 +01:00
Alexander Larsson 6410a43b76 broadway: Make resize grip work again 2012-12-27 22:56:04 +01:00
Alexander Larsson aac4a027eb broadway: Stop default mouse button handling
This makes it not possible to select the canvas objects, etc.
2012-12-27 22:56:04 +01:00
Alexander Larsson 9555478b9e broadway: Add TODO.broadway 2012-12-27 22:56:04 +01:00
Alexander Larsson f84df03513 broadway: Move broadwayd to bin 2012-12-27 22:56:04 +01:00
Alexander Larsson 63b6c07fe0 broadway: During pointer grabs, send pointer events only to one client 2012-12-27 22:56:04 +01:00
Alexander Larsson 75ee72f2ac broadway: Make daemon side server "gdk independent". 2012-12-27 22:56:04 +01:00
Alexander Larsson 3558e655b4 broadway: Proper handling of http port and display nr 2012-12-27 22:56:04 +01:00
Alexander Larsson 59830a9001 broadway: Collect and document some TODOs 2012-12-27 22:56:04 +01:00
Alexander Larsson 329372a343 broadway: Track windows for client and kill on client exit 2012-12-27 22:56:04 +01:00
Alexander Larsson 5ee8b69418 broadway: Rename gdkbroadway-server.c to broadway-server.c
This way the broadway-*.c namespace is for the daemon and gdk* for the
gdk lib.
2012-12-27 22:56:03 +01:00
Alexander Larsson 8b9ccf4ee9 broadway: rename broadway-server to broadwayd
The "server" part is too confusing, there are to many servers around.
2012-12-27 22:56:03 +01:00
Alexander Larsson e801d06229 broadway: Drop libbroadway.la
This is not needed anymore, its just used by the server.
2012-12-27 22:56:03 +01:00
Alexander Larsson 20b79b06ee broadway: rename broadway.[ch] to broadway-output.[ch] 2012-12-27 22:56:03 +01:00
Alexander Larsson 3005f1b844 broadway: disconnect in idle when needed
This makes the ownership cleaner
2012-12-27 22:56:03 +01:00
Alexander Larsson fc96ef51d7 broadway: Initial version of separate broadway server
This kinda works but is very rudimentary
2012-12-27 22:56:03 +01:00
Alexander Larsson 4addb2108e broadway: Add OPs top protocol 2012-12-27 22:56:03 +01:00
Alexander Larsson 9aa36d8d0d broadway: Add enum for even types 2012-12-27 22:56:03 +01:00
Alexander Larsson 95a0c055da broadway: Break out broadway protocol in its own header 2012-12-27 22:56:03 +01:00
Matthias Clasen 58e96f6cbd docs: Restart a Deprecated section
We've accumulated enough wholly-deprecated objects again
that it makes sense to move them to their own section.
2012-12-27 12:38:43 -05:00
Matthias Clasen 6bc2a2da48 Another trivial sorting fix 2012-12-27 12:15:05 -05:00
Matthias Clasen 38963870eb Rename gtkcolorswatchaccessible.h
Call it gtkcolorswatchaccessibleprivate.h. This matches what we're
doing for non-public widget headers in gtk/.
2012-12-27 12:11:12 -05:00
Matthias Clasen 12f9b81b1e Drop separate scrollbar accessible implementation
It didn't really add anything to the range accessible implementation.
2012-12-27 12:06:23 -05:00
Matthias Clasen 9e9824a0a1 Add a test for deriving accessible implementations
This is a trivial example. Just check that we can derive
from GtkButtonAccessible, and have a GtkButton subclass
use the derived accessible implementation.
2012-12-27 12:06:22 -05:00
Matthias Clasen d198ea6296 Install gtk-a11y.h
We add a separate gtk-a11y.h single-include header for
them. This header will work much the same as gtkx.h. It
will be installed in /usr/include/gtk-3.0/gtk, but you
have to include it separately.
2012-12-27 12:05:03 -05:00
Matthias Clasen 5fa4232404 Install a11y headers
We install the headers for the a11y implementations in
/usr/include/gtk-3.0/gtk/a11y/.
2012-12-27 12:05:02 -05:00
Matthias Clasen c3577c66e5 Add single-include guards to a11y headers
More preparation for installing these headers.
2012-12-27 12:05:02 -05:00
Matthias Clasen 07a00d5939 Fix inter-header includes
Since we are going to install these headers soon, we need
to make their mutual includes work in the installed location
as well. Also, avoid including individual gtk headers, to
avoid trouble with single-include guards.
2012-12-27 12:04:01 -05:00
Matthias Clasen d2944ce633 More gail removal
Rename GailMisc to GtkMiscImpl.
2012-12-27 11:27:46 -05:00
Matthias Clasen 4cd806ff0c Rename and clean up gailutil 2012-12-27 11:27:45 -05:00
Matthias Clasen 651241b685 Some renaming
Move gail.h to gtkaccessibility.h, and libgail to libgtka11y.
2012-12-27 11:27:45 -05:00
Matthias Clasen 221ac71278 Cosmetics
Replace GAIL in top comments by 'GTK+ - accessibility implementations'.
2012-12-27 11:27:44 -05:00
Matthias Clasen e4b5e94eb9 Make accessible implementations public
This commit exposes the get_type() functions and standard
headers for accessible implementations. This makes it possible
to derive from the GTK accessible implementations without
GType magic tricks. This is necessary, because we require the
a11y type hierarchy to be parallel to the widget type hierarchy.
So, if you derive a widget and need to adjust its a11y implementation,
you have to be able to derive its accessible implementation.

This commit probably exposes more than is absolutely necessary,
it also exposes accessibles of widgets that are unlikely candidates
for deriving from.
2012-12-27 11:23:22 -05:00
Matthias Clasen 853b5e5fa2 Trivial sorting fix 2012-12-27 01:50:54 -05:00
Fran Diéguez 20c12b0570 Updated Galician translations 2012-12-24 21:55:07 +01:00
Paolo Borelli 70a5718b15 Paint GtkFrame background correctly when there is a label 2012-12-23 16:35:55 +01:00
Kjartan Maraas 4f2da634f1 Updated Norwegian bokmål translation 2012-12-22 20:52:49 +01:00
Benjamin Otte 308971cc2e roundedbox: Fix copy-paste error
y coordinates don't care about the right value, they want bottom.
2012-12-21 19:47:40 +01:00
Benjamin Otte a70e85702f testgtk: Remove GtkAlignment usage from progressbar test
We can use gtk_widget_set_[hv]align here.
2012-12-21 19:47:40 +01:00
Cosimo Cecchi 81fa183b79 aboutdialog: ensure the credits page uses the "view" style class
Since not every theme renders a background for a GtkViewport (and
Adwaita master doesn't), ensure the grid+viewport we use to emulate a
text view here uses the "view" style class.
2012-12-21 17:55:26 +01:00
Kjartan Maraas cd5fdc1e74 Updated Norwegian bokmål translation 2012-12-21 16:12:10 +01:00
Paolo Borelli 751a330ad8 Paint GtkFrame background
It already paints the css border, so let's make it also honor css
background. This is needed to have a box of a different color around
some widgets (e.g. latest gnome-clocks design)
2012-12-21 13:53:02 +01:00
Aurimas Černius 3dfce49032 Updated Lithuanian translation 2012-12-20 23:07:08 +02:00
Alexander Larsson dfbabfbd6d broadway: Use SOURCE operator when scrolling 2012-12-20 00:00:16 +01:00
Alexander Larsson 9e65be6c48 broadway: Allow reconnecting to a broadway page 2012-12-20 00:00:16 +01:00
Alexander Larsson 54714cb228 broadway: Fix possible access-after-free
We need to calculate the buf pointer after the realloc.
2012-12-20 00:00:16 +01:00
Alexander Larsson 9c3cd49abd broadway: Remove separate browser windows hack
This never really worked well, we need to be able to fully handle
sizes from the client.
2012-12-20 00:00:16 +01:00
Alexander Larsson 0a808bea54 broadway: Separate out the server parts
This (shouldn't) change any behaviour, but it moves the
webserver parts to a separate file, making the broadway display file
smaller and preparing for later separating out the server to its own
process.
2012-12-20 00:00:16 +01:00
Shantha kumar 3824376afc Tamil translation updated 2012-12-19 13:22:27 +05:30
Shantha kumar 05240be589 Tamil translation updated 2012-12-19 13:22:27 +05:30
Benjamin Otte cf712c462d combobox: Don't special-case RTL child positions anymore
If you want to get rounded corners on an hbox, instead of
  :first-child {
    border-top-left-radius: 5px;
    border-bottom-left-radius: 5px;
  }
  :last-child {
    border-top-right-radius: 5px;
    border-bottom-right-radius: 5px;
  }
you now need to write:
  :first-child, :last-child:dir(rtl) {
    border-top-left-radius: 5px;
    border-bottom-left-radius: 5px;
  }
  :last-child, :first-child:dir(rtl)
  {
    border-top-right-radius: 5px;
    border-bottom-right-radius: 5px;
  }
2012-12-18 18:25:42 +01:00
Benjamin Otte 821a675013 toolbar: Don't special-case RTL toolbar child positions anymore
If you want to get rounded corners on an hbox, instead of
  :first-child {
    border-top-left-radius: 5px;
    border-bottom-left-radius: 5px;
  }
  :last-child {
    border-top-right-radius: 5px;
    border-bottom-right-radius: 5px;
  }
you now need to write:
  :first-child, :last-child:dir(rtl) {
    border-top-left-radius: 5px;
    border-bottom-left-radius: 5px;
  }
  :last-child, :first-child:dir(rtl)
  {
    border-top-right-radius: 5px;
    border-bottom-right-radius: 5px;
  }
2012-12-18 18:25:42 +01:00
Benjamin Otte 6f86e57c4f box: Don't special-case RTL hbox child positions anymore
If you want to get rounded corners on an hbox, instead of
  :first-child {
    border-top-left-radius: 5px;
    border-bottom-left-radius: 5px;
  }
  :last-child {
    border-top-right-radius: 5px;
    border-bottom-right-radius: 5px;
  }
you now need to write:
  :first-child, :last-child:dir(rtl) {
    border-top-left-radius: 5px;
    border-bottom-left-radius: 5px;
  }
  :last-child, :first-child:dir(rtl) {
    border-top-right-radius: 5px;
    border-bottom-right-radius: 5px;
  }
2012-12-18 18:25:42 +01:00
Benjamin Otte 52768ee6ec stylecontext: Deprecate direction property
...  and the functions implementing it. Also deprecate the direction
getter on GtkThemingEngine.
2012-12-18 18:25:42 +01:00
Benjamin Otte a73cc55e02 stylecontext: Use state flags for direction
... instead of using a custom direction member.

And with that, GtkWidget doesn't need to call
gtk_style_context_set_direction() anymore.
2012-12-18 18:25:42 +01:00
Benjamin Otte 1bf3de223a widget: Set state flags for direction 2012-12-18 18:25:42 +01:00
Benjamin Otte f239edaf9c css: Parse and print the new state flags 2012-12-18 18:25:41 +01:00
Benjamin Otte 26186c74c6 API: Add state flags for RTL and LTR
See http://www.whatwg.org/specs/web-apps/current-work/#pseudo-classes
for the rationale.
2012-12-18 18:25:41 +01:00
Mattias Põldaru 94b65032a2 [l10n] Updated Estonian translation 2012-12-18 15:56:10 +02:00
Matej Urbančič a612956ed5 Updated Slovenian translation 2012-12-18 08:50:17 +01:00
Matthias Clasen 8e4228bf12 bump version 2012-12-18 00:43:14 -05:00
472 changed files with 20316 additions and 11748 deletions
+2 -1
View File
@@ -10,7 +10,7 @@
m4_define([gtk_major_version], [3])
m4_define([gtk_minor_version], [7])
m4_define([gtk_micro_version], [4])
m4_define([gtk_micro_version], [5])
m4_define([gtk_interface_age], [0])
m4_define([gtk_binary_age],
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])
@@ -1787,6 +1787,7 @@ gtk/makefile.msc
gtk/gtkversion.h
gtk/gtk-win32.rc
gtk/a11y/Makefile
gtk/actors/Makefile
gtk/tests/Makefile
libgail-util/Makefile
modules/Makefile
+28 -23
View File
@@ -61,13 +61,9 @@
<xi:include href="xml/gtkstyleproperties.xml" />
<xi:include href="xml/gtkthemingengine.xml" />
<xi:include href="xml/gtkwidgetpath.xml" />
<xi:include href="xml/gtksymboliccolor.xml" />
<xi:include href="xml/gtkgradient.xml" />
<xi:include href="xml/gtkicontheme.xml" />
<xi:include href="xml/gtkiconfactory.xml" />
<xi:include href="xml/gtknumerableicon.xml" />
<xi:include href="xml/gtkrc.xml" />
<xi:include href="xml/gtkstyle.xml" />
</part>
<part id="gtkobjects">
@@ -128,8 +124,6 @@
<xi:include href="xml/gtkentrybuffer.xml" />
<xi:include href="xml/gtkentrycompletion.xml" />
<xi:include href="xml/gtkscale.xml" />
<xi:include href="xml/gtkhscale.xml" />
<xi:include href="xml/gtkvscale.xml" />
<xi:include href="xml/gtkspinbutton.xml" />
<xi:include href="xml/gtksearchentry.xml" />
<xi:include href="xml/gtkeditable.xml" />
@@ -188,7 +182,6 @@
<xi:include href="xml/gtkradiomenuitem.xml" />
<xi:include href="xml/gtkcheckmenuitem.xml" />
<xi:include href="xml/gtkseparatormenuitem.xml" />
<xi:include href="xml/gtktearoffmenuitem.xml" />
<xi:include href="xml/gtktoolshell.xml" />
<xi:include href="xml/gtktoolbar.xml" />
<xi:include href="xml/gtktoolitem.xml" />
@@ -218,9 +211,6 @@
<xi:include href="xml/gtkcolorbutton.xml" />
<xi:include href="xml/gtkcolorchooserwidget.xml" />
<xi:include href="xml/gtkcolorchooserdialog.xml" />
<xi:include href="xml/gtkcolorsel.xml" />
<xi:include href="xml/gtkcolorseldlg.xml" />
<xi:include href="xml/gtkhsv.xml" />
<xi:include href="xml/gtkfilechooser.xml" />
<xi:include href="xml/gtkfilechooserbutton.xml" />
<xi:include href="xml/gtkfilechooserdialog.xml" />
@@ -230,8 +220,6 @@
<xi:include href="xml/gtkfontbutton.xml" />
<xi:include href="xml/gtkfontchooserwidget.xml" />
<xi:include href="xml/gtkfontchooserdialog.xml" />
<xi:include href="xml/gtkfontsel.xml" />
<xi:include href="xml/gtkfontseldlg.xml" />
</chapter>
<chapter id="LayoutContainers">
@@ -240,18 +228,11 @@
<xi:include href="xml/gtkalignment.xml" />
<xi:include href="xml/gtkaspectframe.xml" />
<xi:include href="xml/gtkbox.xml" />
<xi:include href="xml/gtkhbox.xml" />
<xi:include href="xml/gtkvbox.xml" />
<xi:include href="xml/gtkbbox.xml" />
<xi:include href="xml/gtkhbbox.xml" />
<xi:include href="xml/gtkvbbox.xml" />
<xi:include href="xml/gtkfixed.xml" />
<xi:include href="xml/gtkpaned.xml" />
<xi:include href="xml/gtkhpaned.xml" />
<xi:include href="xml/gtkvpaned.xml" />
<xi:include href="xml/gtklayout.xml" />
<xi:include href="xml/gtknotebook.xml" />
<xi:include href="xml/gtktable.xml" />
<xi:include href="xml/gtkexpander.xml" />
<xi:include href="xml/gtkoverlay.xml" />
<xi:include href="xml/gtkorientable.xml" />
@@ -261,15 +242,11 @@
<title>Ornaments</title>
<xi:include href="xml/gtkframe.xml" />
<xi:include href="xml/gtkseparator.xml" />
<xi:include href="xml/gtkhseparator.xml" />
<xi:include href="xml/gtkvseparator.xml" />
</chapter>
<chapter id="ScrollingWidgets">
<title>Scrolling</title>
<xi:include href="xml/gtkscrollbar.xml" />
<xi:include href="xml/gtkhscrollbar.xml" />
<xi:include href="xml/gtkvscrollbar.xml" />
<xi:include href="xml/gtkscrolledwindow.xml" />
<xi:include href="xml/gtkscrollable.xml" />
</chapter>
@@ -350,6 +327,34 @@
<xi:include href="xml/gtkapplicationwindow.xml" />
<xi:include href="xml/gtkactionable.xml" />
</chapter>
<chapter id="DeprecatedObjects">
<title>Deprecated</title>
<xi:include href="xml/gtksymboliccolor.xml" />
<xi:include href="xml/gtkgradient.xml" />
<xi:include href="xml/gtkrc.xml" />
<xi:include href="xml/gtkstyle.xml" />
<xi:include href="xml/gtkhscale.xml" />
<xi:include href="xml/gtkvscale.xml" />
<xi:include href="xml/gtktearoffmenuitem.xml" />
<xi:include href="xml/gtkcolorsel.xml" />
<xi:include href="xml/gtkcolorseldlg.xml" />
<xi:include href="xml/gtkhsv.xml" />
<xi:include href="xml/gtkfontsel.xml" />
<xi:include href="xml/gtkfontseldlg.xml" />
<xi:include href="xml/gtkhbox.xml" />
<xi:include href="xml/gtkvbox.xml" />
<xi:include href="xml/gtkhbbox.xml" />
<xi:include href="xml/gtkvbbox.xml" />
<xi:include href="xml/gtkhpaned.xml" />
<xi:include href="xml/gtkvpaned.xml" />
<xi:include href="xml/gtktable.xml" />
<xi:include href="xml/gtkhseparator.xml" />
<xi:include href="xml/gtkvseparator.xml" />
<xi:include href="xml/gtkhscrollbar.xml" />
<xi:include href="xml/gtkvscrollbar.xml" />
</chapter>
</part>
<part id="migrating">
+15 -7
View File
@@ -15,7 +15,9 @@ AM_CPPFLAGS = \
LDADDS = $(GDK_DEP_LIBS)
noinst_LTLIBRARIES = libbroadway.la libgdk-broadway.la
noinst_LTLIBRARIES = libgdk-broadway.la
bin_PROGRAMS = broadwayd
libgdkinclude_HEADERS = \
gdkbroadway.h
@@ -26,10 +28,6 @@ libgdkbroadwayinclude_HEADERS = \
gdkbroadwaycursor.h \
gdkbroadwayvisual.h
libbroadway_la_SOURCES = \
broadway.h \
broadway.c
clienthtml.h: client.html
$(PERL) $(srcdir)/toarray.pl $(srcdir)/client.html client_html > $@
@@ -73,9 +71,19 @@ libgdk_broadway_la_SOURCES = \
gdkvisual-broadway.c \
gdkwindow-broadway.c \
gdkwindow-broadway.h \
gdkprivate-broadway.h
gdkprivate-broadway.h \
gdkbroadway-server.h \
gdkbroadway-server.c
libgdk_broadway_la_LIBADD = libbroadway.la
broadwayd_SOURCES = \
broadway-protocol.h \
broadwayd.c \
broadway-server.h \
broadway-server.c \
broadway-output.h \
broadway-output.c
broadwayd_LDADD = $(GDK_DEP_LIBS) -lrt
MAINTAINERCLEANFILES = $(broadway_built_sources)
EXTRA_DIST += $(broadway_built_sources)
+13
View File
@@ -0,0 +1,13 @@
Cache surfaces that are opened via shm_open inbetween updates.
Send configure event when a window is moved and no client
Handle implicit grabs when in broadway-server.c
Rewrite events (per-client serials, etc)
keyboard focus handling
Add resize handling to js WM
Make canvas/title non-selectable in browser
Handle browser window size changes
_gdk_broadway_server_has_client is always FALSE, so resize don't work
Send reset events on client disconnect (button up, normal state. Maybe grab state reset?)
rgba suport
shift-select in gedit doesn't work
backdrop mode
@@ -5,7 +5,7 @@
#include <errno.h>
#include <cairo.h>
#include "broadway.h"
#include "broadway-output.h"
/************************************************************************
* Base64 functions *
@@ -351,12 +351,12 @@ static void
append_uint16 (BroadwayOutput *output, guint32 v)
{
gsize old_len = output->buf->len;
guint8 *buf;
if (output->binary)
{
guint8 *buf = (guint8 *)output->buf->str + old_len;
g_string_set_size (output->buf, old_len + 2);
buf = (guint8 *)output->buf->str + old_len;
buf[0] = (v >> 0) & 0xff;
buf[1] = (v >> 8) & 0xff;
}
@@ -371,12 +371,12 @@ static void
append_uint32 (BroadwayOutput *output, guint32 v)
{
gsize old_len = output->buf->len;
guint8 *buf;
if (output->binary)
{
guint8 *buf = (guint8 *)output->buf->str + old_len;
g_string_set_size (output->buf, old_len + 4);
buf = (guint8 *)output->buf->str + old_len;
buf[0] = (v >> 0) & 0xff;
buf[1] = (v >> 8) & 0xff;
buf[2] = (v >> 16) & 0xff;
@@ -422,7 +422,7 @@ broadway_output_copy_rectangles (BroadwayOutput *output, int id,
{
int i;
write_header (output, 'b');
write_header (output, BROADWAY_OP_COPY_RECTANGLES);
append_uint16 (output, id);
append_uint16 (output, n_rects);
for (i = 0; i < n_rects; i++)
@@ -441,7 +441,7 @@ broadway_output_grab_pointer (BroadwayOutput *output,
int id,
gboolean owner_event)
{
write_header (output, 'g');
write_header (output, BROADWAY_OP_GRAB_POINTER);
append_uint16 (output, id);
append_bool (output, owner_event);
}
@@ -452,7 +452,7 @@ broadway_output_ungrab_pointer (BroadwayOutput *output)
guint32 serial;
serial = output->serial;
write_header (output, 'u');
write_header (output, BROADWAY_OP_UNGRAB_POINTER);
return serial;
}
@@ -462,7 +462,7 @@ broadway_output_new_surface(BroadwayOutput *output,
int id, int x, int y, int w, int h,
gboolean is_temp)
{
write_header (output, 's');
write_header (output, BROADWAY_OP_NEW_SURFACE);
append_uint16 (output, id);
append_uint16 (output, x);
append_uint16 (output, y);
@@ -474,21 +474,21 @@ broadway_output_new_surface(BroadwayOutput *output,
void
broadway_output_show_surface(BroadwayOutput *output, int id)
{
write_header (output, 'S');
write_header (output, BROADWAY_OP_SHOW_SURFACE);
append_uint16 (output, id);
}
void
broadway_output_hide_surface(BroadwayOutput *output, int id)
{
write_header (output, 'H');
write_header (output, BROADWAY_OP_HIDE_SURFACE);
append_uint16 (output, id);
}
void
broadway_output_destroy_surface(BroadwayOutput *output, int id)
{
write_header (output, 'd');
write_header (output, BROADWAY_OP_DESTROY_SURFACE);
append_uint16 (output, id);
}
@@ -508,7 +508,7 @@ broadway_output_move_resize_surface (BroadwayOutput *output,
if (!has_pos && !has_size)
return;
write_header (output, 'm');
write_header (output, BROADWAY_OP_MOVE_RESIZE);
val = (!!has_pos) | ((!!has_size) << 1);
append_uint16 (output, id);
append_flags (output, val);
@@ -529,7 +529,7 @@ broadway_output_set_transient_for (BroadwayOutput *output,
int id,
int parent_id)
{
write_header (output, 'p');
write_header (output, BROADWAY_OP_SET_TRANSIENT_FOR);
append_uint16 (output, id);
append_uint16 (output, parent_id);
}
@@ -541,7 +541,7 @@ broadway_output_put_rgb (BroadwayOutput *output, int id, int x, int y,
{
gsize size_start, image_start, len;
write_header (output, 'i');
write_header (output, BROADWAY_OP_PUT_RGB);
append_uint16 (output, id);
append_uint16 (output, x);
@@ -798,7 +798,7 @@ broadway_output_put_rgba (BroadwayOutput *output, int id, int x, int y,
{
guint8 *subdata;
write_header (output, 'i');
write_header (output, BROADWAY_OP_PUT_RGB);
append_uint16 (output, id);
append_uint16 (output, x + rects[i].x1);
append_uint16 (output, y + rects[i].y1);
@@ -830,6 +830,6 @@ void
broadway_output_surface_flush (BroadwayOutput *output,
int id)
{
write_header (output, 'f');
write_header (output, BROADWAY_OP_FLUSH);
append_uint16 (output, id);
}
@@ -1,13 +1,12 @@
#ifndef __BROADWAY_H__
#define __BROADWAY_H__
#include <glib.h>
#include <gio/gio.h>
#include "broadway-protocol.h"
typedef struct BroadwayOutput BroadwayOutput;
typedef struct {
int x, y;
int width, height;
} BroadwayRect;
typedef enum {
BROADWAY_WS_CONTINUATION = 0,
BROADWAY_WS_TEXT = 1,
@@ -78,3 +77,5 @@ void broadway_output_grab_pointer (BroadwayOutput *output,
gboolean owner_event);
guint32 broadway_output_ungrab_pointer (BroadwayOutput *output);
void broadway_output_pong (BroadwayOutput *output);
#endif /* __BROADWAY_H__ */
+264
View File
@@ -0,0 +1,264 @@
#ifndef __BROADWAY_PROTOCOL_H__
#define __BROADWAY_PROTOCOL_H__
#include <glib.h>
typedef struct {
gint32 x, y;
gint32 width, height;
} BroadwayRect;
typedef enum {
BROADWAY_EVENT_ENTER = 'e',
BROADWAY_EVENT_LEAVE = 'l',
BROADWAY_EVENT_POINTER_MOVE = 'm',
BROADWAY_EVENT_BUTTON_PRESS = 'b',
BROADWAY_EVENT_BUTTON_RELEASE = 'B',
BROADWAY_EVENT_SCROLL = 's',
BROADWAY_EVENT_KEY_PRESS = 'k',
BROADWAY_EVENT_KEY_RELEASE = 'K',
BROADWAY_EVENT_GRAB_NOTIFY = 'g',
BROADWAY_EVENT_UNGRAB_NOTIFY = 'u',
BROADWAY_EVENT_CONFIGURE_NOTIFY = 'w',
BROADWAY_EVENT_DELETE_NOTIFY = 'W',
BROADWAY_EVENT_SCREEN_SIZE_CHANGED = 'd'
} BroadwayEventType;
typedef enum {
BROADWAY_OP_COPY_RECTANGLES = 'b',
BROADWAY_OP_GRAB_POINTER = 'g',
BROADWAY_OP_UNGRAB_POINTER = 'u',
BROADWAY_OP_NEW_SURFACE = 's',
BROADWAY_OP_SHOW_SURFACE = 'S',
BROADWAY_OP_HIDE_SURFACE = 'H',
BROADWAY_OP_DESTROY_SURFACE = 'd',
BROADWAY_OP_MOVE_RESIZE = 'm',
BROADWAY_OP_SET_TRANSIENT_FOR = 'p',
BROADWAY_OP_PUT_RGB = 'i',
BROADWAY_OP_FLUSH = 'f',
} BroadwayOpType;
typedef struct {
guint8 type;
guint32 serial;
guint64 time;
} BroadwayInputBaseMsg;
typedef struct {
BroadwayInputBaseMsg base;
guint32 mouse_window_id; /* The real window, not taking grabs into account */
guint32 event_window_id;
gint32 root_x;
gint32 root_y;
gint32 win_x;
gint32 win_y;
guint32 state;
} BroadwayInputPointerMsg;
typedef struct {
BroadwayInputPointerMsg pointer;
guint32 mode;
} BroadwayInputCrossingMsg;
typedef struct {
BroadwayInputPointerMsg pointer;
guint32 button;
} BroadwayInputButtonMsg;
typedef struct {
BroadwayInputPointerMsg pointer;
gint32 dir;
} BroadwayInputScrollMsg;
typedef struct {
BroadwayInputBaseMsg base;
guint32 mouse_window_id; /* The real window, not taking grabs into account */
guint32 state;
gint32 key;
} BroadwayInputKeyMsg;
typedef struct {
BroadwayInputBaseMsg base;
gint32 res;
} BroadwayInputGrabReply;
typedef struct {
BroadwayInputBaseMsg base;
gint32 id;
gint32 x;
gint32 y;
gint32 width;
gint32 height;
} BroadwayInputConfigureNotify;
typedef struct {
BroadwayInputBaseMsg base;
gint32 width;
gint32 height;
} BroadwayInputScreenResizeNotify;
typedef struct {
BroadwayInputBaseMsg base;
gint32 id;
} BroadwayInputDeleteNotify;
typedef union {
BroadwayInputBaseMsg base;
BroadwayInputPointerMsg pointer;
BroadwayInputCrossingMsg crossing;
BroadwayInputButtonMsg button;
BroadwayInputScrollMsg scroll;
BroadwayInputKeyMsg key;
BroadwayInputGrabReply grab_reply;
BroadwayInputConfigureNotify configure_notify;
BroadwayInputDeleteNotify delete_notify;
BroadwayInputScreenResizeNotify screen_resize_notify;
} BroadwayInputMsg;
typedef enum {
BROADWAY_REQUEST_NEW_WINDOW,
BROADWAY_REQUEST_FLUSH,
BROADWAY_REQUEST_SYNC,
BROADWAY_REQUEST_QUERY_MOUSE,
BROADWAY_REQUEST_DESTROY_WINDOW,
BROADWAY_REQUEST_SHOW_WINDOW,
BROADWAY_REQUEST_HIDE_WINDOW,
BROADWAY_REQUEST_SET_TRANSIENT_FOR,
BROADWAY_REQUEST_TRANSLATE,
BROADWAY_REQUEST_UPDATE,
BROADWAY_REQUEST_MOVE_RESIZE,
BROADWAY_REQUEST_GRAB_POINTER,
BROADWAY_REQUEST_UNGRAB_POINTER
} BroadwayRequestType;
typedef struct {
guint32 size;
guint32 serial;
guint32 type;
} BroadwayRequestBase, BroadwayRequestFlush, BroadwayRequestSync, BroadwayRequestQueryMouse;
typedef struct {
BroadwayRequestBase base;
guint32 id;
} BroadwayRequestDestroyWindow, BroadwayRequestShowWindow, BroadwayRequestHideWindow;
typedef struct {
BroadwayRequestBase base;
guint32 id;
guint32 parent;
} BroadwayRequestSetTransientFor;
typedef struct {
BroadwayRequestBase base;
guint32 id;
gint32 dx;
gint32 dy;
guint32 n_rects;
BroadwayRect rects[1];
} BroadwayRequestTranslate;
typedef struct {
BroadwayRequestBase base;
guint32 id;
char name[34];
guint32 width;
guint32 height;
} BroadwayRequestUpdate;
typedef struct {
BroadwayRequestBase base;
guint32 id;
guint32 owner_events;
guint32 event_mask;
guint32 time_;
} BroadwayRequestGrabPointer;
typedef struct {
BroadwayRequestBase base;
guint32 time_;
} BroadwayRequestUngrabPointer;
typedef struct {
BroadwayRequestBase base;
gint32 x;
gint32 y;
guint32 width;
guint32 height;
guint32 is_temp;
} BroadwayRequestNewWindow;
typedef struct {
BroadwayRequestBase base;
guint32 id;
gint32 x;
gint32 y;
guint32 width;
guint32 height;
} BroadwayRequestMoveResize;
typedef union {
BroadwayRequestBase base;
BroadwayRequestNewWindow new_window;
BroadwayRequestFlush flush;
BroadwayRequestSync sync;
BroadwayRequestQueryMouse query_mouse;
BroadwayRequestDestroyWindow destroy_window;
BroadwayRequestShowWindow show_window;
BroadwayRequestHideWindow hide_window;
BroadwayRequestSetTransientFor set_transient_for;
BroadwayRequestUpdate update;
BroadwayRequestMoveResize move_resize;
BroadwayRequestGrabPointer grab_pointer;
BroadwayRequestUngrabPointer ungrab_pointer;
BroadwayRequestTranslate translate;
} BroadwayRequest;
typedef enum {
BROADWAY_REPLY_EVENT,
BROADWAY_REPLY_SYNC,
BROADWAY_REPLY_QUERY_MOUSE,
BROADWAY_REPLY_NEW_WINDOW,
BROADWAY_REPLY_GRAB_POINTER,
BROADWAY_REPLY_UNGRAB_POINTER
} BroadwayReplyType;
typedef struct {
guint32 size;
guint32 last_serial;
guint32 in_reply_to;
guint32 type;
} BroadwayReplyBase, BroadwayReplySync;
typedef struct {
BroadwayReplyBase base;
guint32 id;
} BroadwayReplyNewWindow;
typedef struct {
BroadwayReplyBase base;
guint32 status;
} BroadwayReplyGrabPointer, BroadwayReplyUngrabPointer;
typedef struct {
BroadwayReplyBase base;
guint32 toplevel;
gint32 root_x;
gint32 root_y;
guint32 mask;
} BroadwayReplyQueryMouse;
typedef struct {
BroadwayReplyBase base;
BroadwayInputMsg msg;
} BroadwayReplyEvent;
typedef union {
BroadwayReplyBase base;
BroadwayReplyEvent event;
BroadwayReplyQueryMouse query_mouse;
BroadwayReplyNewWindow new_window;
BroadwayReplyGrabPointer grab_pointer;
BroadwayReplyUngrabPointer ungrab_pointer;
} BroadwayReply;
#endif /* __BROADWAY_PROTOCOL_H__ */
File diff suppressed because it is too large Load Diff
+77
View File
@@ -0,0 +1,77 @@
#ifndef __BROADWAY_SERVER__
#define __BROADWAY_SERVER__
#include "broadway-protocol.h"
#include <glib-object.h>
#include <cairo.h>
void broadway_events_got_input (BroadwayInputMsg *message,
gint32 client_id);
typedef struct _BroadwayServer BroadwayServer;
typedef struct _BroadwayServerClass BroadwayServerClass;
#define BROADWAY_TYPE_SERVER (broadway_server_get_type())
#define BROADWAY_SERVER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), BROADWAY_TYPE_SERVER, BroadwayServer))
#define BROADWAY_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), BROADWAY_TYPE_SERVER, BroadwayServerClass))
#define BROADWAY_IS_SERVER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), BROADWAY_TYPE_SERVER))
#define BROADWAY_IS_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), BROADWAY_TYPE_SERVER))
#define BROADWAY_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), BROADWAY_TYPE_SERVER, BroadwayServerClass))
BroadwayServer *broadway_server_new (int port,
GError **error);
gboolean broadway_server_has_client (BroadwayServer *server);
void broadway_server_flush (BroadwayServer *server);
void broadway_server_sync (BroadwayServer *server);
gulong broadway_server_get_next_serial (BroadwayServer *server);
guint32 broadway_server_get_last_seen_time (BroadwayServer *server);
gboolean broadway_server_lookahead_event (BroadwayServer *server,
const char *types);
void broadway_server_query_mouse (BroadwayServer *server,
guint32 *toplevel,
gint32 *root_x,
gint32 *root_y,
guint32 *mask);
guint32 broadway_server_grab_pointer (BroadwayServer *server,
gint client_id,
gint id,
gboolean owner_events,
guint32 event_mask,
guint32 time_);
guint32 broadway_server_ungrab_pointer (BroadwayServer *server,
guint32 time_);
gint32 broadway_server_get_mouse_toplevel (BroadwayServer *server);
guint32 broadway_server_new_window (BroadwayServer *server,
int x,
int y,
int width,
int height,
gboolean is_temp);
void broadway_server_destroy_window (BroadwayServer *server,
gint id);
gboolean broadway_server_window_show (BroadwayServer *server,
gint id);
gboolean broadway_server_window_hide (BroadwayServer *server,
gint id);
void broadway_server_window_set_transient_for (BroadwayServer *server,
gint id,
gint parent);
gboolean broadway_server_window_translate (BroadwayServer *server,
gint id,
cairo_region_t *area,
gint dx,
gint dy);
cairo_surface_t * broadway_server_create_surface (int width,
int height);
void broadway_server_window_update (BroadwayServer *server,
gint id,
cairo_surface_t *surface);
gboolean broadway_server_window_move_resize (BroadwayServer *server,
gint id,
int x,
int y,
int width,
int height);
#endif /* __BROADWAY_SERVER__ */
+41 -243
View File
@@ -132,18 +132,6 @@ function createXHR()
return null;
}
/* This resizes the window so the *inner* size is the specified size */
function resizeBrowserWindow(window, w, h) {
var innerW = window.innerWidth;
var innerH = window.innerHeight;
var outerW = window.outerWidth;
var outerH = window.outerHeight;
window.resizeTo(w + outerW - innerW,
h + outerH - innerH);
}
function resizeCanvas(canvas, w, h)
{
/* Canvas resize clears the data, so we need to save it first */
@@ -163,8 +151,6 @@ function resizeCanvas(canvas, w, h)
context.drawImage(tmpCanvas, 0, 0, tmpCanvas.width, tmpCanvas.height);
}
var useToplevelWindows = false;
var toplevelWindows = [];
var grab = new Object();
grab.window = null;
grab.ownerEvents = false;
@@ -276,121 +262,11 @@ function flushSurface(surface)
}
}
function ensureSurfaceInDocument(surface, doc)
{
if (surface.document != doc) {
var oldCanvas = surface.canvas;
var canvas = doc.importNode(oldCanvas, false);
doc.body.appendChild(canvas);
canvas.surface = surface;
oldCanvas.parentNode.removeChild(oldCanvas);
surface.canvas = canvas;
if (surface.toplevelElement == oldCanvas)
surface.toplevelElement = canvas;
surface.document = doc;
}
}
function sendConfigureNotify(surface)
{
sendInput("w", [surface.id, surface.x, surface.y, surface.width, surface.height]);
}
var windowGeometryTimeout = null;
function updateBrowserWindowGeometry(win, alwaysSendConfigure) {
if (win.closed)
return;
var surface = win.surface;
var innerW = win.innerWidth;
var innerH = win.innerHeight;
var x = surface.x;
var y = surface.y;
if (win.mozInnerScreenX != undefined) {
x = win.mozInnerScreenX;
y = win.mozInnerScreenY;
} else if (win.screenTop != undefined) {
x = win.screenTop;
y = win.screenLeft;
} else {
alert("No implementation to get window position");
}
if (alwaysSendConfigure || x != surface.x || y != surface.y ||
innerW != surface.width || innerH != surface.height) {
var oldX = surface.x;
var oldY = surface.y;
surface.x = x;
surface.y = y;
if (surface.width != innerW || surface.height != innerH)
resizeCanvas(surface.canvas, innerW, innerH);
surface.width = innerW;
surface.height = innerH;
sendConfigureNotify(surface);
for (id in surfaces) {
var childSurface = surfaces[id];
var transientToplevel = getTransientToplevel(childSurface);
if (transientToplevel != null && transientToplevel == surface) {
childSurface.x += surface.x - oldX;
childSurface.y += surface.y - oldY;
sendConfigureNotify(childSurface);
}
}
}
}
function browserWindowClosed(win) {
var surface = win.surface;
sendInput ("W", [surface.id]);
for (id in surfaces) {
var childSurface = surfaces[id];
var transientToplevel = getTransientToplevel(childSurface);
if (transientToplevel != null && transientToplevel == surface) {
sendInput ("W", [childSurface.id]);
}
}
}
function registerWindow(win)
{
toplevelWindows.push(win);
win.onresize = function(ev) { updateBrowserWindowGeometry(ev.target, false); };
if (!windowGeometryTimeout)
windowGeometryTimeout = setInterval(function () {
for (var i = 0; i < toplevelWindows.length; i++)
updateBrowserWindowGeometry(toplevelWindows[i], false);
}, 2000);
win.onunload = function(ev) { browserWindowClosed(ev.target.defaultView); };
}
function unregisterWindow(win)
{
var i = toplevelWindows.indexOf(win);
if (i >= 0)
toplevelWindows.splice(i, 1);
if (windowGeometryTimeout && toplevelWindows.length == 0) {
clearInterval(windowGeometryTimeout);
windowGeometryTimeout = null;
}
}
function getTransientToplevel(surface)
{
while (surface && surface.transientParent != 0) {
surface = surfaces[surface.transientParent];
if (surface && surface.window)
return surface;
}
return null;
}
function getStyle(el, styleProp)
{
if (el.currentStyle) {
@@ -440,8 +316,6 @@ function cmdCreateSurface(id, x, y, width, height, isTemp)
surface.drawQueue = [];
surface.transientParent = 0;
surface.visible = false;
surface.window = null;
surface.document = document;
surface.frame = null;
var canvas = document.createElement("canvas");
@@ -451,7 +325,7 @@ function cmdCreateSurface(id, x, y, width, height, isTemp)
surface.canvas = canvas;
var toplevelElement;
if (useToplevelWindows || isTemp) {
if (isTemp) {
toplevelElement = canvas;
document.body.appendChild(canvas);
} else {
@@ -511,42 +385,10 @@ function cmdShowSurface(id)
var xOffset = surface.x;
var yOffset = surface.y;
if (useToplevelWindows) {
var doc = document;
if (!surface.isTemp) {
var options =
'width='+surface.width+',height='+surface.height+
',location=no,menubar=no,scrollbars=no,toolbar=no';
if (surface.positioned)
options = options +
',left='+surface.x+',top='+surface.y+',screenX='+surface.x+',screenY='+surface.y;
var win = window.open('','_blank', options);
win.surface = surface;
registerWindow(win);
doc = win.document;
doc.open();
doc.write("<body></body>");
setupDocument(doc);
surface.window = win;
xOffset = 0;
yOffset = 0;
} else {
var transientToplevel = getTransientToplevel(surface);
if (transientToplevel) {
doc = transientToplevel.window.document;
xOffset = surface.x - transientToplevel.x;
yOffset = surface.y - transientToplevel.y;
}
}
ensureSurfaceInDocument(surface, doc);
} else {
if (surface.frame) {
var offset = getFrameOffset(surface);
xOffset -= offset.x;
yOffset -= offset.y;
}
if (surface.frame) {
var offset = getFrameOffset(surface);
xOffset -= offset.x;
yOffset -= offset.y;
}
surface.toplevelElement.style["left"] = xOffset + "px";
@@ -554,9 +396,6 @@ function cmdShowSurface(id)
surface.toplevelElement.style["visibility"] = "visible";
restackWindows();
if (surface.window)
updateBrowserWindowGeometry(surface.window, false);
}
function cmdHideSurface(id)
@@ -573,15 +412,6 @@ function cmdHideSurface(id)
var element = surface.toplevelElement;
element.style["visibility"] = "hidden";
// Import the canvas into the main document
ensureSurfaceInDocument(surface, document);
if (surface.window) {
unregisterWindow(surface.window);
surface.window.close();
surface.window = null;
}
}
function cmdSetTransientFor(id, parentId)
@@ -666,45 +496,30 @@ function cmdMoveResizeSurface(id, has_pos, x, y, has_size, w, h)
resizeCanvas(surface.canvas, w, h);
if (surface.visible) {
if (surface.window) {
/* TODO: This moves the outer frame position, we really want the inner position.
* However this isn't *strictly* invalid, as any WM could have done whatever it
* wanted with the positioning of the window.
*/
if (has_pos)
surface.window.moveTo(surface.x, surface.y);
if (has_size)
resizeBrowserWindow(surface.window, w, h);
} else {
if (has_pos) {
var xOffset = surface.x;
var yOffset = surface.y;
if (has_pos) {
var xOffset = surface.x;
var yOffset = surface.y;
var transientToplevel = getTransientToplevel(surface);
if (transientToplevel) {
xOffset = surface.x - transientToplevel.x;
yOffset = surface.y - transientToplevel.y;
}
var element = surface.canvas;
if (surface.frame) {
element = surface.frame;
var offset = getFrameOffset(surface);
xOffset -= offset.x;
yOffset -= offset.y;
}
element.style["left"] = xOffset + "px";
element.style["top"] = yOffset + "px";
var transientToplevel = getTransientToplevel(surface);
if (transientToplevel) {
xOffset = surface.x - transientToplevel.x;
yOffset = surface.y - transientToplevel.y;
}
var element = surface.canvas;
if (surface.frame) {
element = surface.frame;
var offset = getFrameOffset(surface);
xOffset -= offset.x;
yOffset -= offset.y;
}
element.style["left"] = xOffset + "px";
element.style["top"] = yOffset + "px";
}
}
if (surface.window) {
updateBrowserWindowGeometry(surface.window, true);
} else {
sendConfigureNotify(surface);
}
sendConfigureNotify(surface);
}
function cmdFlushSurface(id)
@@ -985,13 +800,8 @@ function getPositionsFromAbsCoord(absX, absY, relativeId) {
function getPositionsFromEvent(ev, relativeId) {
var absX, absY;
if (useToplevelWindows) {
absX = ev.screenX;
absY = ev.screenY;
} else {
absX = ev.pageX;
absY = ev.pageY;
}
absX = ev.pageX;
absY = ev.pageY;
var res = getPositionsFromAbsCoord(absX, absY, relativeId);
lastX = res.rootX;
@@ -1020,10 +830,6 @@ function updateForEvent(ev) {
lastState |= GDK_MOD1_MASK;
lastTimeStamp = ev.timeStamp;
if (ev.target.surface && ev.target.surface.window) {
var win = ev.target.surface.window;
updateBrowserWindowGeometry(win, false);
}
}
function onMouseMove (ev) {
@@ -1141,7 +947,7 @@ function onMouseDown (ev) {
localGrab.lastX = ev.pageX;
localGrab.lastY = ev.pageY;
moveToTop(localGrab.frame.frameFor);
return;
return false;
}
if (id == 0 && ev.target.closeFor) { /* mouse click on frame */
@@ -1153,13 +959,14 @@ function onMouseDown (ev) {
localGrab.button = ev.target;
localGrab.lastX = ev.pageX;
localGrab.lastY = ev.pageY;
return;
return false;
}
var pos = getPositionsFromEvent(ev, id);
if (grab.window == null)
doGrab (id, false, true);
sendInput ("b", [realWindowWithMouse, id, pos.rootX, pos.rootY, pos.winX, pos.winY, lastState, button]);
return false;
}
function onMouseUp (ev) {
@@ -1189,13 +996,15 @@ function onMouseUp (ev) {
sendInput ("W", [localGrab.surface.id]);
}
localGrab = null;
return;
return false;
}
sendInput ("B", [realWindowWithMouse, id, pos.rootX, pos.rootY, pos.winX, pos.winY, lastState, button]);
if (grab.window != null && grab.implicit)
doUngrab();
return false;
}
/* Some of the keyboard handling code is from noVNC and
@@ -2671,7 +2480,7 @@ function handleKeyDown(e) {
// browser behaviors or it has no corresponding keyPress
// event, then send it immediately
if (!ignoreKeyEvent(ev))
sendInput("k", [keysym, lastState]);
sendInput("k", [realWindowWithMouse, keysym, lastState]);
suppress = true;
}
@@ -2716,7 +2525,7 @@ function handleKeyPress(e) {
// Send the translated keysym
if (keysym > 0)
sendInput ("k", [keysym, lastState]);
sendInput ("k", [realWindowWithMouse, keysym, lastState]);
// Stop keypress events just in case
return cancelEvent(ev);
@@ -2735,7 +2544,7 @@ function handleKeyUp(e) {
}
if (keysym > 0)
sendInput ("K", [keysym, lastState]);
sendInput ("K", [realWindowWithMouse, keysym, lastState]);
return cancelEvent(ev);
}
@@ -2830,8 +2639,6 @@ function connect()
var query_string = url.split("?");
if (query_string.length > 1) {
var params = query_string[1].split("&");
if (params[0].indexOf("toplevel") != -1)
useToplevelWindows = true;
}
var loc = window.location.toString().replace("http:", "ws:");
@@ -2848,19 +2655,14 @@ function connect()
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;
w = window.innerWidth;
h = window.innerHeight;
window.onresize = function(ev) {
var w, h;
w = window.innerWidth;
h = window.innerHeight;
sendInput ("d", [w, h]);
};
}
sendInput ("d", [w, h]);
};
sendInput ("d", [w, h]);
};
ws.onclose = function() {
@@ -2871,8 +2673,4 @@ function connect()
};
setupDocument(document);
window.onunload = function (ev) {
for (var i = 0; i < toplevelWindows.length; i++)
toplevelWindows[i].close();
};
}
+515
View File
@@ -0,0 +1,515 @@
#include "config.h"
#include <string.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <glib.h>
#include <gio/gio.h>
#include <gio/gunixsocketaddress.h>
#include "broadway-server.h"
BroadwayServer *server;
GList *clients;
static guint32 client_id_count = 1;
typedef struct {
guint32 id;
GSocketConnection *connection;
GBufferedInputStream *in;
guint32 last_seen_serial;
GList *windows;
guint disconnect_idle;
} BroadwayClient;
static void
client_free (BroadwayClient *client)
{
g_assert (client->windows == NULL);
g_assert (client->disconnect_idle == 0);
clients = g_list_remove (clients, client);
g_object_unref (client->connection);
g_object_unref (client->in);
g_free (client);
}
static void
client_disconnected (BroadwayClient *client)
{
GList *l;
if (client->disconnect_idle != 0)
{
g_source_remove (client->disconnect_idle);
client->disconnect_idle = 0;
}
for (l = client->windows; l != NULL; l = l->next)
broadway_server_destroy_window (server,
GPOINTER_TO_UINT (l->data));
g_list_free (client->windows);
client->windows = NULL;
broadway_server_flush (server);
client_free (client);
}
static gboolean
disconnect_idle_cb (BroadwayClient *client)
{
client->disconnect_idle = 0;
client_disconnected (client);
return G_SOURCE_REMOVE;
}
static void
client_disconnect_in_idle (BroadwayClient *client)
{
if (client->disconnect_idle == 0)
client->disconnect_idle =
g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc)disconnect_idle_cb, client, NULL);
}
static void
send_reply (BroadwayClient *client,
BroadwayRequest *request,
BroadwayReply *reply,
gsize size,
guint32 type)
{
GOutputStream *output;
reply->base.size = size;
reply->base.last_serial = client->last_seen_serial;
reply->base.in_reply_to = request ? request->base.serial : 0;
reply->base.type = type;
output = g_io_stream_get_output_stream (G_IO_STREAM (client->connection));
if (!g_output_stream_write_all (output, reply, size, NULL, NULL, NULL))
{
g_printerr ("can't write to client");
client_disconnect_in_idle (client);
}
}
static cairo_region_t *
region_from_rects (BroadwayRect *rects, int n_rects)
{
cairo_region_t *region;
cairo_rectangle_int_t *cairo_rects;
int i;
cairo_rects = g_new (cairo_rectangle_int_t, n_rects);
for (i = 0; i < n_rects; i++)
{
cairo_rects[i].x = rects[i].x;
cairo_rects[i].y = rects[i].y;
cairo_rects[i].width = rects[i].width;
cairo_rects[i].height = rects[i].height;
}
region = cairo_region_create_rectangles (cairo_rects, n_rects);
g_free (cairo_rects);
return region;
}
static const cairo_user_data_key_t shm_cairo_key;
typedef struct {
void *data;
gsize data_size;
} ShmSurfaceData;
static void
shm_data_unmap (void *_data)
{
ShmSurfaceData *data = _data;
munmap (data->data, data->data_size);
g_free (data);
}
cairo_surface_t *
open_surface (char *name, int width, int height)
{
ShmSurfaceData *data;
cairo_surface_t *surface;
gsize size;
void *ptr;
int fd;
size = width * height * sizeof (guint32);
fd = shm_open(name, O_RDONLY, 0600);
if (fd == -1)
{
perror ("Failed to shm_open");
return NULL;
}
ptr = mmap(0, size, PROT_READ, MAP_SHARED, fd, 0);
(void) close(fd);
if (ptr == NULL)
return NULL;
data = g_new0 (ShmSurfaceData, 1);
data->data = ptr;
data->data_size = size;
surface = cairo_image_surface_create_for_data ((guchar *)data->data,
CAIRO_FORMAT_RGB24,
width, height,
width * sizeof (guint32));
g_assert (surface != NULL);
cairo_surface_set_user_data (surface, &shm_cairo_key,
data, shm_data_unmap);
return surface;
}
static void
client_handle_request (BroadwayClient *client,
BroadwayRequest *request)
{
BroadwayReplyNewWindow reply_new_window;
BroadwayReplySync reply_sync;
BroadwayReplyQueryMouse reply_query_mouse;
BroadwayReplyGrabPointer reply_grab_pointer;
BroadwayReplyUngrabPointer reply_ungrab_pointer;
cairo_region_t *area;
cairo_surface_t *surface;
client->last_seen_serial = request->base.serial;
switch (request->base.type)
{
case BROADWAY_REQUEST_NEW_WINDOW:
reply_new_window.id =
broadway_server_new_window (server,
request->new_window.x,
request->new_window.y,
request->new_window.width,
request->new_window.height,
request->new_window.is_temp);
client->windows =
g_list_prepend (client->windows,
GUINT_TO_POINTER (reply_new_window.id));
send_reply (client, request, (BroadwayReply *)&reply_new_window, sizeof (reply_new_window),
BROADWAY_REPLY_NEW_WINDOW);
break;
case BROADWAY_REQUEST_FLUSH:
broadway_server_flush (server);
break;
case BROADWAY_REQUEST_SYNC:
broadway_server_flush (server);
send_reply (client, request, (BroadwayReply *)&reply_sync, sizeof (reply_sync),
BROADWAY_REPLY_SYNC);
break;
case BROADWAY_REQUEST_QUERY_MOUSE:
broadway_server_query_mouse (server,
&reply_query_mouse.toplevel,
&reply_query_mouse.root_x,
&reply_query_mouse.root_y,
&reply_query_mouse.mask);
send_reply (client, request, (BroadwayReply *)&reply_query_mouse, sizeof (reply_query_mouse),
BROADWAY_REPLY_QUERY_MOUSE);
break;
case BROADWAY_REQUEST_DESTROY_WINDOW:
client->windows =
g_list_remove (client->windows,
GUINT_TO_POINTER (request->destroy_window.id));
broadway_server_destroy_window (server, request->destroy_window.id);
break;
case BROADWAY_REQUEST_SHOW_WINDOW:
broadway_server_window_show (server, request->show_window.id);
break;
case BROADWAY_REQUEST_HIDE_WINDOW:
broadway_server_window_hide (server, request->hide_window.id);
break;
case BROADWAY_REQUEST_SET_TRANSIENT_FOR:
broadway_server_window_set_transient_for (server,
request->set_transient_for.id,
request->set_transient_for.parent);
break;
case BROADWAY_REQUEST_TRANSLATE:
area = region_from_rects (request->translate.rects,
request->translate.n_rects);
broadway_server_window_translate (server,
request->translate.id,
area,
request->translate.dx,
request->translate.dy);
cairo_region_destroy (area);
break;
case BROADWAY_REQUEST_UPDATE:
surface = open_surface (request->update.name,
request->update.width,
request->update.height);
if (surface != NULL)
{
broadway_server_window_update (server,
request->update.id,
surface);
cairo_surface_destroy (surface);
}
break;
case BROADWAY_REQUEST_MOVE_RESIZE:
if (!broadway_server_window_move_resize (server,
request->move_resize.id,
request->move_resize.x,
request->move_resize.y,
request->move_resize.width,
request->move_resize.height))
{
/* TODO: Send configure request */
}
break;
case BROADWAY_REQUEST_GRAB_POINTER:
reply_grab_pointer.status =
broadway_server_grab_pointer (server,
client->id,
request->grab_pointer.id,
request->grab_pointer.owner_events,
request->grab_pointer.event_mask,
request->grab_pointer.time_);
send_reply (client, request, (BroadwayReply *)&reply_grab_pointer, sizeof (reply_grab_pointer),
BROADWAY_REPLY_GRAB_POINTER);
break;
case BROADWAY_REQUEST_UNGRAB_POINTER:
reply_ungrab_pointer.status =
broadway_server_ungrab_pointer (server,
request->ungrab_pointer.time_);
send_reply (client, request, (BroadwayReply *)&reply_ungrab_pointer, sizeof (reply_ungrab_pointer),
BROADWAY_REPLY_UNGRAB_POINTER);
break;
default:
g_warning ("Unknown request of type %d\n", request->base.type);
}
}
static void
client_fill_cb (GObject *source_object,
GAsyncResult *result,
gpointer user_data)
{
BroadwayClient *client = user_data;
gssize res;
res = g_buffered_input_stream_fill_finish (client->in, result, NULL);
if (res > 0)
{
guint32 size;
gsize count, remaining;
guint8 *buffer;
BroadwayRequest request;
buffer = (guint8 *)g_buffered_input_stream_peek_buffer (client->in, &count);
remaining = count;
while (remaining >= sizeof (guint32))
{
memcpy (&size, buffer, sizeof (guint32));
if (size <= remaining)
{
g_assert (size >= sizeof (BroadwayRequestBase));
g_assert (size <= sizeof (BroadwayRequest));
memcpy (&request, buffer, size);
client_handle_request (client, &request);
remaining -= size;
buffer += size;
}
}
/* This is guaranteed not to block */
g_input_stream_skip (G_INPUT_STREAM (client->in), count - remaining, NULL, NULL);
g_buffered_input_stream_fill_async (client->in,
4*1024,
0,
NULL,
client_fill_cb, client);
}
else
{
client_disconnected (client);
}
}
static gboolean
incoming_client (GSocketService *service,
GSocketConnection *connection,
GObject *source_object)
{
BroadwayClient *client;
GInputStream *input;
client = g_new0 (BroadwayClient, 1);
client->id = client_id_count++;
client->connection = g_object_ref (connection);
input = g_io_stream_get_input_stream (G_IO_STREAM (client->connection));
client->in = (GBufferedInputStream *)g_buffered_input_stream_new (input);
clients = g_list_prepend (clients, client);
g_buffered_input_stream_fill_async (client->in,
4*1024,
0,
NULL,
client_fill_cb, client);
return TRUE;
}
int
main (int argc, char *argv[])
{
GError *error = NULL;
GOptionContext *context;
GMainLoop *loop;
GSocketAddress *address;
GSocketService *listener;
char *path, *base;
int http_port = 0;
int display = 1;
const GOptionEntry entries[] = {
{ "port", 'p', 0, G_OPTION_ARG_INT, &http_port, "Httpd port", "PORT" },
{ NULL }
};
context = g_option_context_new ("[:DISPLAY] - broadway display daemon");
g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
if (!g_option_context_parse (context, &argc, &argv, &error))
{
g_printerr ("option parsing failed: %s\n", error->message);
exit (1);
}
if (argc > 1)
{
if (*argv[1] != ':')
{
g_printerr ("Usage broadwayd [:DISPLAY]\n");
exit (1);
}
display = strtol(argv[1]+1, NULL, 10);
if (display == 0)
{
g_printerr ("Failed to parse display num %s\n", argv[1]);
exit (1);
}
}
if (http_port == 0)
http_port = 8080 + (display - 1);
server = broadway_server_new (http_port, &error);
if (server == NULL)
{
g_printerr ("%s\n", error->message);
return 1;
}
base = g_strdup_printf ("broadway%d.socket", display);
path = g_build_filename (g_get_user_runtime_dir (), base, NULL);
g_free (base);
g_print ("Listening on %s\n", path);
address = g_unix_socket_address_new_with_type (path, -1,
G_UNIX_SOCKET_ADDRESS_ABSTRACT);
g_free (path);
listener = g_socket_service_new ();
if (!g_socket_listener_add_address (G_SOCKET_LISTENER (listener),
address,
G_SOCKET_TYPE_STREAM,
G_SOCKET_PROTOCOL_DEFAULT,
G_OBJECT (server),
NULL,
&error))
{
g_printerr ("Can't listen: %s\n", error->message);
return 1;
}
g_object_unref (address);
g_signal_connect (listener, "incoming", G_CALLBACK (incoming_client), NULL);
g_socket_service_start (G_SOCKET_SERVICE (listener));
loop = g_main_loop_new (NULL, FALSE);
g_main_loop_run (loop);
return 0;
}
static gsize
get_event_size (int type)
{
switch (type)
{
case BROADWAY_EVENT_ENTER:
case BROADWAY_EVENT_LEAVE:
return sizeof (BroadwayInputCrossingMsg);
case BROADWAY_EVENT_POINTER_MOVE:
return sizeof (BroadwayInputPointerMsg);
case BROADWAY_EVENT_BUTTON_PRESS:
case BROADWAY_EVENT_BUTTON_RELEASE:
return sizeof (BroadwayInputButtonMsg);
case BROADWAY_EVENT_SCROLL:
return sizeof (BroadwayInputScrollMsg);
case BROADWAY_EVENT_KEY_PRESS:
case BROADWAY_EVENT_KEY_RELEASE:
return sizeof (BroadwayInputKeyMsg);
case BROADWAY_EVENT_GRAB_NOTIFY:
case BROADWAY_EVENT_UNGRAB_NOTIFY:
return sizeof (BroadwayInputGrabReply);
case BROADWAY_EVENT_CONFIGURE_NOTIFY:
return sizeof (BroadwayInputConfigureNotify);
case BROADWAY_EVENT_DELETE_NOTIFY:
return sizeof (BroadwayInputDeleteNotify);
case BROADWAY_EVENT_SCREEN_SIZE_CHANGED:
return sizeof (BroadwayInputScreenResizeNotify);
default:
g_assert_not_reached ();
}
return 0;
}
void
broadway_events_got_input (BroadwayInputMsg *message,
gint32 client_id)
{
GList *l;
BroadwayReplyEvent reply_event;
gsize size;
size = get_event_size (message->base.type);
reply_event.msg = *message;
for (l = clients; l != NULL; l = l->next)
{
BroadwayClient *client = l->data;
if (client_id == -1 ||
client->id == client_id)
{
send_reply (client, NULL, (BroadwayReply *)&reply_event,
sizeof (BroadwayReplyBase) + size,
BROADWAY_REPLY_EVENT);
}
}
}
+688
View File
@@ -0,0 +1,688 @@
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "gdkbroadway-server.h"
#include "gdkprivate-broadway.h"
#include <glib.h>
#include <glib/gprintf.h>
#include <gio/gunixsocketaddress.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
typedef struct BroadwayInput BroadwayInput;
struct _GdkBroadwayServer {
GObject parent_instance;
guint32 next_serial;
GSocketConnection *connection;
guint32 recv_buffer_size;
guint8 recv_buffer[1024];
guint process_input_idle;
GList *incomming;
};
struct _GdkBroadwayServerClass
{
GObjectClass parent_class;
};
static gboolean input_available_cb (gpointer stream, gpointer user_data);
G_DEFINE_TYPE (GdkBroadwayServer, gdk_broadway_server, G_TYPE_OBJECT)
static void
gdk_broadway_server_init (GdkBroadwayServer *server)
{
server->next_serial = 1;
}
static void
gdk_broadway_server_finalize (GObject *object)
{
G_OBJECT_CLASS (gdk_broadway_server_parent_class)->finalize (object);
}
static void
gdk_broadway_server_class_init (GdkBroadwayServerClass * class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
object_class->finalize = gdk_broadway_server_finalize;
}
gboolean
_gdk_broadway_server_lookahead_event (GdkBroadwayServer *server,
const char *types)
{
return FALSE;
}
gulong
_gdk_broadway_server_get_next_serial (GdkBroadwayServer *server)
{
return (gulong)server->next_serial;
}
GdkBroadwayServer *
_gdk_broadway_server_new (int port, GError **error)
{
GdkBroadwayServer *server;
char *basename;
GSocketClient *client;
GSocketConnection *connection;
GSocketAddress *address;
GPollableInputStream *pollable;
GInputStream *in;
GSource *source;
char *path;
basename = g_strdup_printf ("broadway%d.socket", port);
path = g_build_filename (g_get_user_runtime_dir (), basename, NULL);
g_free (basename);
address = g_unix_socket_address_new_with_type (path, -1,
G_UNIX_SOCKET_ADDRESS_ABSTRACT);
g_free (path);
client = g_socket_client_new ();
error = NULL;
connection = g_socket_client_connect (client, G_SOCKET_CONNECTABLE (address), NULL, error);
g_object_unref (address);
g_object_unref (client);
if (connection == NULL)
return NULL;
server = g_object_new (GDK_TYPE_BROADWAY_SERVER, NULL);
server->connection = connection;
in = g_io_stream_get_input_stream (G_IO_STREAM (server->connection));
pollable = G_POLLABLE_INPUT_STREAM (in);
source = g_pollable_input_stream_create_source (pollable, NULL);
g_source_attach (source, NULL);
g_source_set_callback (source, (GSourceFunc)input_available_cb, server, NULL);
return server;
}
guint32
_gdk_broadway_server_get_last_seen_time (GdkBroadwayServer *server)
{
return 0;
}
static guint32
gdk_broadway_server_send_message_with_size (GdkBroadwayServer *server, BroadwayRequestBase *base,
gsize size, guint32 type)
{
GOutputStream *out;
gsize written;
base->size = size;
base->type = type;
base->serial = server->next_serial++;
out = g_io_stream_get_output_stream (G_IO_STREAM (server->connection));
if (!g_output_stream_write_all (out, base, size, &written, NULL, NULL))
{
g_printerr ("Unable to write to server\n");
exit (1);
}
g_assert (written == size);
return base->serial;
}
#define gdk_broadway_server_send_message(_server, _msg, _type) \
gdk_broadway_server_send_message_with_size(_server, (BroadwayRequestBase *)&_msg, sizeof (_msg), _type)
static void
parse_all_input (GdkBroadwayServer *server)
{
guint8 *p, *end;
guint32 size;
BroadwayReply *reply;
p = server->recv_buffer;
end = p + server->recv_buffer_size;
while (p + sizeof (guint32) <= end)
{
memcpy (&size, p, sizeof (guint32));
if (p + size > end)
break;
reply = g_memdup (p, size);
p += size;
server->incomming = g_list_append (server->incomming, reply);
}
if (p < end)
memmove (server->recv_buffer, p, end - p);
server->recv_buffer_size = end - p;
}
static void
read_some_input_blocking (GdkBroadwayServer *server)
{
GInputStream *in;
gssize res;
in = g_io_stream_get_input_stream (G_IO_STREAM (server->connection));
g_assert (server->recv_buffer_size < sizeof (server->recv_buffer));
res = g_input_stream_read (in, &server->recv_buffer[server->recv_buffer_size],
sizeof (server->recv_buffer) - server->recv_buffer_size,
NULL, NULL);
if (res <= 0)
{
g_printerr ("Unable to read from broadway server\n");
exit (1);
}
server->recv_buffer_size += res;
}
static void
read_some_input_nonblocking (GdkBroadwayServer *server)
{
GInputStream *in;
GPollableInputStream *pollable;
gssize res;
GError *error;
in = g_io_stream_get_input_stream (G_IO_STREAM (server->connection));
pollable = G_POLLABLE_INPUT_STREAM (in);
g_assert (server->recv_buffer_size < sizeof (server->recv_buffer));
error = NULL;
res = g_pollable_input_stream_read_nonblocking (pollable, &server->recv_buffer[server->recv_buffer_size],
sizeof (server->recv_buffer) - server->recv_buffer_size,
NULL, &error);
if (res < 0 && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
{
g_error_free (error);
res = 0;
}
else if (res <= 0)
{
g_printerr ("Unable to read from broadway server: %s\n", error ? error->message : "eof");
exit (1);
}
server->recv_buffer_size += res;
}
static BroadwayReply *
find_response_by_serial (GdkBroadwayServer *server, guint32 serial)
{
GList *l;
for (l = server->incomming; l != NULL; l = l->next)
{
BroadwayReply *reply = l->data;
if (reply->base.in_reply_to == serial)
return reply;
}
return NULL;
}
static void
process_input_messages (GdkBroadwayServer *server)
{
BroadwayReply *reply;
if (server->process_input_idle != 0)
{
g_source_remove (server->process_input_idle);
server->process_input_idle = 0;
}
while (server->incomming)
{
reply = server->incomming->data;
server->incomming =
g_list_delete_link (server->incomming,
server->incomming);
if (reply->base.type == BROADWAY_REPLY_EVENT)
_gdk_broadway_events_got_input (&reply->event.msg);
else
g_warning ("Unhandled reply type %d\n", reply->base.type);
g_free (reply);
}
}
static gboolean
process_input_idle_cb (GdkBroadwayServer *server)
{
server->process_input_idle = 0;
process_input_messages (server);
return G_SOURCE_REMOVE;
}
static void
queue_process_input_at_idle (GdkBroadwayServer *server)
{
if (server->process_input_idle == 0)
server->process_input_idle =
g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc)process_input_idle_cb, server, NULL);
}
static gboolean
input_available_cb (gpointer stream, gpointer user_data)
{
GdkBroadwayServer *server = user_data;
read_some_input_nonblocking (server);
parse_all_input (server);
process_input_messages (server);
return G_SOURCE_CONTINUE;
}
static BroadwayReply *
gdk_broadway_server_wait_for_reply (GdkBroadwayServer *server,
guint32 serial)
{
BroadwayReply *reply;
while (TRUE)
{
reply = find_response_by_serial (server, serial);
if (reply)
{
server->incomming = g_list_remove (server->incomming, reply);
return reply;
}
read_some_input_blocking (server);
parse_all_input (server);
}
queue_process_input_at_idle (server);
}
void
_gdk_broadway_server_flush (GdkBroadwayServer *server)
{
BroadwayRequestFlush msg;
gdk_broadway_server_send_message(server, msg, BROADWAY_REQUEST_FLUSH);
}
void
_gdk_broadway_server_sync (GdkBroadwayServer *server)
{
BroadwayRequestSync msg;
guint32 serial;
BroadwayReply *reply;
serial = gdk_broadway_server_send_message (server, msg,
BROADWAY_REQUEST_SYNC);
reply = gdk_broadway_server_wait_for_reply (server, serial);
g_assert (reply->base.type == BROADWAY_REPLY_SYNC);
g_free (reply);
return;
}
void
_gdk_broadway_server_query_mouse (GdkBroadwayServer *server,
guint32 *toplevel,
gint32 *root_x,
gint32 *root_y,
guint32 *mask)
{
BroadwayRequestQueryMouse msg;
guint32 serial;
BroadwayReply *reply;
serial = gdk_broadway_server_send_message (server, msg,
BROADWAY_REQUEST_QUERY_MOUSE);
reply = gdk_broadway_server_wait_for_reply (server, serial);
g_assert (reply->base.type == BROADWAY_REPLY_QUERY_MOUSE);
if (toplevel)
*toplevel = reply->query_mouse.toplevel;
if (root_x)
*root_x = reply->query_mouse.root_x;
if (root_y)
*root_y = reply->query_mouse.root_y;
if (mask)
*mask = reply->query_mouse.mask;
g_free (reply);
}
guint32
_gdk_broadway_server_new_window (GdkBroadwayServer *server,
int x,
int y,
int width,
int height,
gboolean is_temp)
{
BroadwayRequestNewWindow msg;
guint32 serial, id;
BroadwayReply *reply;
msg.x = x;
msg.y = y;
msg.width = width;
msg.height = height;
msg.is_temp = is_temp;
serial = gdk_broadway_server_send_message (server, msg,
BROADWAY_REQUEST_NEW_WINDOW);
reply = gdk_broadway_server_wait_for_reply (server, serial);
g_assert (reply->base.type == BROADWAY_REPLY_NEW_WINDOW);
id = reply->new_window.id;
g_free (reply);
return id;
}
void
_gdk_broadway_server_destroy_window (GdkBroadwayServer *server,
gint id)
{
BroadwayRequestDestroyWindow msg;
msg.id = id;
gdk_broadway_server_send_message (server, msg,
BROADWAY_REQUEST_DESTROY_WINDOW);
}
gboolean
_gdk_broadway_server_window_show (GdkBroadwayServer *server,
gint id)
{
BroadwayRequestShowWindow msg;
msg.id = id;
gdk_broadway_server_send_message (server, msg,
BROADWAY_REQUEST_SHOW_WINDOW);
return TRUE;
}
gboolean
_gdk_broadway_server_window_hide (GdkBroadwayServer *server,
gint id)
{
BroadwayRequestHideWindow msg;
msg.id = id;
gdk_broadway_server_send_message (server, msg,
BROADWAY_REQUEST_HIDE_WINDOW);
return TRUE;
}
void
_gdk_broadway_server_window_set_transient_for (GdkBroadwayServer *server,
gint id, gint parent)
{
BroadwayRequestSetTransientFor msg;
msg.id = id;
msg.parent = parent;
gdk_broadway_server_send_message (server, msg,
BROADWAY_REQUEST_SET_TRANSIENT_FOR);
}
gboolean
_gdk_broadway_server_window_translate (GdkBroadwayServer *server,
gint id,
cairo_region_t *area,
gint dx,
gint dy)
{
BroadwayRequestTranslate *msg;
cairo_rectangle_int_t rect;
int i, n_rects;
gsize msg_size;
n_rects = cairo_region_num_rectangles (area);
msg_size = sizeof (BroadwayRequestTranslate) + (n_rects-1) * sizeof (BroadwayRect);
msg = g_malloc (msg_size);
msg->id = id;
msg->dx = dx;
msg->dy = dy;
msg->n_rects = n_rects;
for (i = 0; i < n_rects; i++)
{
cairo_region_get_rectangle (area, i, &rect);
msg->rects[i].x = rect.x;
msg->rects[i].y = rect.y;
msg->rects[i].width = rect.width;
msg->rects[i].height = rect.height;
}
gdk_broadway_server_send_message_with_size (server, (BroadwayRequestBase *)msg, msg_size,
BROADWAY_REQUEST_TRANSLATE);
g_free (msg);
return TRUE;
}
static char
make_valid_fs_char (char c)
{
if (c == 0 || c == '/')
return c + 1;
return c;
}
/* name must have at least space for 34 bytes */
static int
create_random_shm (char *name)
{
guint32 r;
int i, o, fd;
while (TRUE)
{
o = 0;
name[o++] = '/';
for (i = 0; i < 32/4; i++)
{
r = g_random_int ();
name[o++] = make_valid_fs_char ((r >> 0) & 0xff);
name[o++] = make_valid_fs_char ((r >> 8) & 0xff);
name[o++] = make_valid_fs_char ((r >> 16) & 0xff);
name[o++] = make_valid_fs_char ((r >> 24) & 0xff);
}
name[o++] = 0;
fd = shm_open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
if (fd >= 0)
return fd;
if (errno != EEXIST)
{
g_printerr ("Unable to allocate shared mem for window");
exit (1);
}
}
}
static const cairo_user_data_key_t gdk_broadway_shm_cairo_key;
typedef struct {
char name[34];
void *data;
gsize data_size;
} BroadwayShmSurfaceData;
static void
shm_data_destroy (void *_data)
{
BroadwayShmSurfaceData *data = _data;
munmap (data->data, data->data_size);
shm_unlink (data->name);
g_free (data);
}
cairo_surface_t *
_gdk_broadway_server_create_surface (int width,
int height)
{
BroadwayShmSurfaceData *data;
cairo_surface_t *surface;
int res;
int fd;
data = g_new (BroadwayShmSurfaceData, 1);
data->data_size = width * height * sizeof (guint32);
fd = create_random_shm (data->name);
res = ftruncate (fd, data->data_size);
g_assert (res != -1);
data->data = mmap(0, data->data_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
(void) close(fd);
surface = cairo_image_surface_create_for_data ((guchar *)data->data,
CAIRO_FORMAT_RGB24, width, height, width * sizeof (guint32));
g_assert (surface != NULL);
cairo_surface_set_user_data (surface, &gdk_broadway_shm_cairo_key,
data, shm_data_destroy);
return surface;
}
void
_gdk_broadway_server_window_update (GdkBroadwayServer *server,
gint id,
cairo_surface_t *surface)
{
BroadwayRequestUpdate msg;
BroadwayShmSurfaceData *data;
if (surface == NULL)
return;
data = cairo_surface_get_user_data (surface, &gdk_broadway_shm_cairo_key);
g_assert (data != NULL);
msg.id = id;
memcpy (msg.name, data->name, 34);
msg.width = cairo_image_surface_get_width (surface);
msg.height = cairo_image_surface_get_height (surface);
gdk_broadway_server_send_message (server, msg,
BROADWAY_REQUEST_UPDATE);
}
gboolean
_gdk_broadway_server_window_move_resize (GdkBroadwayServer *server,
gint id,
int x,
int y,
int width,
int height)
{
BroadwayRequestMoveResize msg;
msg.id = id;
msg.x = x;
msg.y = y;
msg.width = width;
msg.height = height;
gdk_broadway_server_send_message (server, msg,
BROADWAY_REQUEST_MOVE_RESIZE);
return TRUE;
}
GdkGrabStatus
_gdk_broadway_server_grab_pointer (GdkBroadwayServer *server,
gint id,
gboolean owner_events,
guint32 event_mask,
guint32 time_)
{
BroadwayRequestGrabPointer msg;
guint32 serial, status;
BroadwayReply *reply;
msg.id = id;
msg.owner_events = owner_events;
msg.event_mask = event_mask;
msg.time_ = time_;
serial = gdk_broadway_server_send_message (server, msg,
BROADWAY_REQUEST_GRAB_POINTER);
reply = gdk_broadway_server_wait_for_reply (server, serial);
g_assert (reply->base.type == BROADWAY_REPLY_GRAB_POINTER);
status = reply->grab_pointer.status;
g_free (reply);
return status;
}
guint32
_gdk_broadway_server_ungrab_pointer (GdkBroadwayServer *server,
guint32 time_)
{
BroadwayRequestUngrabPointer msg;
guint32 serial, status;
BroadwayReply *reply;
msg.time_ = time_;
serial = gdk_broadway_server_send_message (server, msg,
BROADWAY_REQUEST_UNGRAB_POINTER);
reply = gdk_broadway_server_wait_for_reply (server, serial);
g_assert (reply->base.type == BROADWAY_REPLY_UNGRAB_POINTER);
status = reply->ungrab_pointer.status;
g_free (reply);
return status;
}
+70
View File
@@ -0,0 +1,70 @@
#ifndef __GDK_BROADWAY_SERVER__
#define __GDK_BROADWAY_SERVER__
#include <gdk/gdktypes.h>
#include "broadway-protocol.h"
typedef struct _GdkBroadwayServer GdkBroadwayServer;
typedef struct _GdkBroadwayServerClass GdkBroadwayServerClass;
#define GDK_TYPE_BROADWAY_SERVER (gdk_broadway_server_get_type())
#define GDK_BROADWAY_SERVER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_BROADWAY_SERVER, GdkBroadwayServer))
#define GDK_BROADWAY_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_BROADWAY_SERVER, GdkBroadwayServerClass))
#define GDK_IS_BROADWAY_SERVER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_BROADWAY_SERVER))
#define GDK_IS_BROADWAY_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_BROADWAY_SERVER))
#define GDK_BROADWAY_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_BROADWAY_SERVER, GdkBroadwayServerClass))
GdkBroadwayServer *_gdk_broadway_server_new (int port,
GError **error);
void _gdk_broadway_server_flush (GdkBroadwayServer *server);
void _gdk_broadway_server_sync (GdkBroadwayServer *server);
gulong _gdk_broadway_server_get_next_serial (GdkBroadwayServer *server);
guint32 _gdk_broadway_server_get_last_seen_time (GdkBroadwayServer *server);
gboolean _gdk_broadway_server_lookahead_event (GdkBroadwayServer *server,
const char *types);
void _gdk_broadway_server_query_mouse (GdkBroadwayServer *server,
guint32 *toplevel,
gint32 *root_x,
gint32 *root_y,
guint32 *mask);
GdkGrabStatus _gdk_broadway_server_grab_pointer (GdkBroadwayServer *server,
gint id,
gboolean owner_events,
guint32 event_mask,
guint32 time_);
guint32 _gdk_broadway_server_ungrab_pointer (GdkBroadwayServer *server,
guint32 time_);
gint32 _gdk_broadway_server_get_mouse_toplevel (GdkBroadwayServer *server);
guint32 _gdk_broadway_server_new_window (GdkBroadwayServer *server,
int x,
int y,
int width,
int height,
gboolean is_temp);
void _gdk_broadway_server_destroy_window (GdkBroadwayServer *server,
gint id);
gboolean _gdk_broadway_server_window_show (GdkBroadwayServer *server,
gint id);
gboolean _gdk_broadway_server_window_hide (GdkBroadwayServer *server,
gint id);
void _gdk_broadway_server_window_set_transient_for (GdkBroadwayServer *server,
gint id,
gint parent);
gboolean _gdk_broadway_server_window_translate (GdkBroadwayServer *server,
gint id,
cairo_region_t *area,
gint dx,
gint dy);
cairo_surface_t *_gdk_broadway_server_create_surface (int width,
int height);
void _gdk_broadway_server_window_update (GdkBroadwayServer *server,
gint id,
cairo_surface_t *surface);
gboolean _gdk_broadway_server_window_move_resize (GdkBroadwayServer *server,
gint id,
int x,
int y,
int width,
int height);
#endif /* __GDK_BROADWAY_SERVER__ */
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_BROADWAY_CURSOR_H__
#define __GDK_BROADWAY_CURSOR_H__
#if !defined (__GDKBROADWAY_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkbroadway.h> can be included directly."
#endif
#ifndef __GDK_BROADWAY_CURSOR_H__
#define __GDK_BROADWAY_CURSOR_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -17,13 +17,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_BROADWAY_DISPLAY_MANAGER_H__
#define __GDK_BROADWAY_DISPLAY_MANAGER_H__
#if !defined(__GDKBROADWAY_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkbroadway.h> can be included directly."
#endif
#ifndef __GDK_BROADWAY_DISPLAY_MANAGER_H__
#define __GDK_BROADWAY_DISPLAY_MANAGER_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+25 -84
View File
@@ -156,7 +156,10 @@ gdk_broadway_device_query_state (GdkDevice *device,
GdkDisplay *display;
GdkBroadwayDisplay *broadway_display;
GdkScreen *screen;
gint device_root_x, device_root_y;
gint32 device_root_x, device_root_y;
gint32 mouse_toplevel_id;
GdkWindow *mouse_toplevel;
guint32 mask32;
if (gdk_device_get_source (device) != GDK_SOURCE_MOUSE)
return;
@@ -173,36 +176,12 @@ gdk_broadway_device_query_state (GdkDevice *device,
*root_window = gdk_screen_get_root_window (screen);
}
if (broadway_display->output)
{
_gdk_broadway_display_consume_all_input (display);
if (root_x)
*root_x = broadway_display->future_root_x;
if (root_y)
*root_y = broadway_display->future_root_y;
/* TODO: Should really use future_x/y when we get configure events */
if (win_x)
*win_x = broadway_display->future_root_x - toplevel->x;
if (win_y)
*win_y = broadway_display->future_root_y - toplevel->y;
if (mask)
*mask = broadway_display->future_state;
if (child_window)
{
if (gdk_window_get_window_type (toplevel) == GDK_WINDOW_ROOT)
*child_window =
g_hash_table_lookup (broadway_display->id_ht,
GINT_TO_POINTER (broadway_display->future_mouse_in_toplevel));
else
*child_window = toplevel; /* No native children */
}
return;
}
/* Fallback when unconnected */
device_root_x = broadway_display->last_x;
device_root_y = broadway_display->last_y;
_gdk_broadway_server_query_mouse (broadway_display->server,
&mouse_toplevel_id,
&device_root_x,
&device_root_y,
&mask32);
mouse_toplevel = g_hash_table_lookup (broadway_display->id_ht, GINT_TO_POINTER (mouse_toplevel_id));
if (root_x)
*root_x = device_root_x;
@@ -213,12 +192,12 @@ gdk_broadway_device_query_state (GdkDevice *device,
if (win_y)
*win_y = device_root_y - toplevel->y;
if (mask)
*mask = broadway_display->last_state;
*mask = mask32;
if (child_window)
{
if (gdk_window_get_window_type (toplevel) == GDK_WINDOW_ROOT)
{
*child_window = broadway_display->mouse_in_toplevel;
*child_window = mouse_toplevel;
if (*child_window == NULL)
*child_window = toplevel;
}
@@ -236,13 +215,10 @@ void
_gdk_broadway_window_grab_check_destroy (GdkWindow *window)
{
GdkDisplay *display = gdk_window_get_display (window);
GdkBroadwayDisplay *broadway_display;
GdkDeviceManager *device_manager;
GdkDeviceGrabInfo *grab;
GList *devices, *d;
broadway_display = GDK_BROADWAY_DISPLAY (display);
device_manager = gdk_display_get_device_manager (display);
/* Get all devices */
@@ -257,8 +233,6 @@ _gdk_broadway_window_grab_check_destroy (GdkWindow *window)
{
grab->serial_end = grab->serial_start;
grab->implicit_ungrab = TRUE;
broadway_display->pointer_grab_window = NULL;
}
}
@@ -290,29 +264,11 @@ gdk_broadway_device_grab (GdkDevice *device,
else
{
/* Device is a pointer */
if (broadway_display->pointer_grab_window != NULL &&
time_ != 0 && broadway_display->pointer_grab_time > time_)
return GDK_GRAB_ALREADY_GRABBED;
if (time_ == 0)
time_ = broadway_display->last_seen_time;
broadway_display->pointer_grab_window = window;
broadway_display->pointer_grab_owner_events = owner_events;
broadway_display->pointer_grab_time = time_;
if (broadway_display->output)
{
broadway_output_grab_pointer (broadway_display->output,
GDK_WINDOW_IMPL_BROADWAY (window->impl)->id,
owner_events);
gdk_display_flush (display);
}
/* TODO: What about toplevel grab events if we're not connected? */
return GDK_GRAB_SUCCESS;
return _gdk_broadway_server_grab_pointer (broadway_display->server,
GDK_WINDOW_IMPL_BROADWAY (window->impl)->id,
owner_events,
event_mask,
time_);
}
}
@@ -340,31 +296,17 @@ gdk_broadway_device_ungrab (GdkDevice *device,
else
{
/* Device is a pointer */
serial = _gdk_broadway_server_ungrab_pointer (broadway_display->server, time_);
if (broadway_display->pointer_grab_window != NULL &&
time_ != 0 && broadway_display->pointer_grab_time > time_)
return;
/* TODO: What about toplevel grab events if we're not connected? */
if (broadway_display->output)
if (serial != 0)
{
serial = broadway_output_ungrab_pointer (broadway_display->output);
gdk_display_flush (display);
grab = _gdk_display_get_last_device_grab (display, device);
if (grab &&
(time_ == GDK_CURRENT_TIME ||
grab->time == GDK_CURRENT_TIME ||
!TIME_IS_LATER (grab->time, time_)))
grab->serial_end = serial;
}
else
{
serial = broadway_display->saved_serial;
}
grab = _gdk_display_get_last_device_grab (display, device);
if (grab &&
(time_ == GDK_CURRENT_TIME ||
grab->time == GDK_CURRENT_TIME ||
!TIME_IS_LATER (grab->time, time_)))
grab->serial_end = serial;
broadway_display->pointer_grab_window = NULL;
}
}
@@ -375,7 +317,6 @@ gdk_broadway_device_window_at_position (GdkDevice *device,
GdkModifierType *mask,
gboolean get_toplevel)
{
gboolean res;
GdkScreen *screen;
GdkWindow *root_window;
GdkWindow *window;
File diff suppressed because it is too large Load Diff
+2 -99
View File
@@ -27,7 +27,7 @@
#include "gdkwindow.h"
#include "gdkinternals.h"
#include "gdkmain.h"
#include "broadway.h"
#include "gdkbroadway-server.h"
G_BEGIN_DECLS
@@ -43,82 +43,6 @@ typedef struct BroadwayInput BroadwayInput;
#define GDK_IS_BROADWAY_DISPLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_BROADWAY_DISPLAY))
#define GDK_BROADWAY_DISPLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_BROADWAY_DISPLAY, GdkBroadwayDisplayClass))
typedef struct {
char type;
guint32 serial;
guint64 time;
} BroadwayInputBaseMsg;
typedef struct {
BroadwayInputBaseMsg base;
guint32 mouse_window_id; /* The real window, not taking grabs into account */
guint32 event_window_id;
int root_x;
int root_y;
int win_x;
int win_y;
guint32 state;
} BroadwayInputPointerMsg;
typedef struct {
BroadwayInputPointerMsg pointer;
guint32 mode;
} BroadwayInputCrossingMsg;
typedef struct {
BroadwayInputPointerMsg pointer;
guint32 button;
} BroadwayInputButtonMsg;
typedef struct {
BroadwayInputPointerMsg pointer;
int dir;
} BroadwayInputScrollMsg;
typedef struct {
BroadwayInputBaseMsg base;
guint32 state;
int key;
} BroadwayInputKeyMsg;
typedef struct {
BroadwayInputBaseMsg base;
int res;
} BroadwayInputGrabReply;
typedef struct {
BroadwayInputBaseMsg base;
int id;
int x;
int y;
int width;
int height;
} BroadwayInputConfigureNotify;
typedef struct {
BroadwayInputBaseMsg base;
int width;
int height;
} BroadwayInputScreenResizeNotify;
typedef struct {
BroadwayInputBaseMsg base;
int id;
} BroadwayInputDeleteNotify;
typedef union {
BroadwayInputBaseMsg base;
BroadwayInputPointerMsg pointer;
BroadwayInputCrossingMsg crossing;
BroadwayInputButtonMsg button;
BroadwayInputScrollMsg scroll;
BroadwayInputKeyMsg key;
BroadwayInputGrabReply grab_reply;
BroadwayInputConfigureNotify configure_notify;
BroadwayInputDeleteNotify delete_notify;
BroadwayInputScreenResizeNotify screen_resize_notify;
} BroadwayInputMsg;
struct _GdkBroadwayDisplay
{
GdkDisplay parent_instance;
@@ -129,10 +53,6 @@ struct _GdkBroadwayDisplay
GList *toplevels;
GSource *event_source;
GdkWindow *mouse_in_toplevel;
int last_x, last_y; /* in root coords */
guint32 last_state;
GdkWindow *real_mouse_in_toplevel; /* Not affected by grabs */
/* Keyboard related information */
GdkKeymap *keymap;
@@ -147,24 +67,7 @@ struct _GdkBroadwayDisplay
/* The offscreen window that has the pointer in it (if any) */
GdkWindow *active_offscreen_window;
GSocketService *service;
BroadwayOutput *output;
guint32 saved_serial;
guint64 last_seen_time;
BroadwayInput *input;
GList *input_messages;
guint process_input_idle;
/* Explicit pointer grabs: */
GdkWindow *pointer_grab_window;
guint32 pointer_grab_time;
gboolean pointer_grab_owner_events;
/* Future data, from the currently queued events */
int future_root_x;
int future_root_y;
GdkModifierType future_state;
int future_mouse_in_toplevel;
GdkBroadwayServer *server;
};
struct _GdkBroadwayDisplayClass
+18 -55
View File
@@ -87,9 +87,9 @@ gdk_event_source_check (GSource *source)
}
void
_gdk_broadway_events_got_input (GdkDisplay *display,
BroadwayInputMsg *message)
_gdk_broadway_events_got_input (BroadwayInputMsg *message)
{
GdkDisplay *display = gdk_display_get_default ();
GdkBroadwayDisplay *display_broadway = GDK_BROADWAY_DISPLAY (display);
GdkScreen *screen;
GdkWindow *window;
@@ -97,17 +97,8 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
GList *node;
switch (message->base.type) {
case 'e': /* Enter */
display_broadway->last_x = message->pointer.root_x;
display_broadway->last_y = message->pointer.root_y;
display_broadway->last_state = message->pointer.state;
display_broadway->real_mouse_in_toplevel =
g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
case BROADWAY_EVENT_ENTER:
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_window_id));
/* TODO: Unset when it dies */
display_broadway->mouse_in_toplevel = window;
if (window)
{
event = gdk_event_new (GDK_ENTER_NOTIFY);
@@ -134,16 +125,8 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
_gdk_windowing_got_event (display, node, event, message->base.serial);
}
break;
case 'l': /* Leave */
display_broadway->last_x = message->pointer.root_x;
display_broadway->last_y = message->pointer.root_y;
display_broadway->last_state = message->pointer.state;
display_broadway->real_mouse_in_toplevel =
g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
case BROADWAY_EVENT_LEAVE:
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_window_id));
display_broadway->mouse_in_toplevel = NULL;
if (window)
{
event = gdk_event_new (GDK_LEAVE_NOTIFY);
@@ -170,13 +153,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
_gdk_windowing_got_event (display, node, event, message->base.serial);
}
break;
case 'm': /* Mouse move */
display_broadway->last_x = message->pointer.root_x;
display_broadway->last_y = message->pointer.root_y;
display_broadway->last_state = message->pointer.state;
display_broadway->real_mouse_in_toplevel =
g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
case BROADWAY_EVENT_POINTER_MOVE:
if (_gdk_broadway_moveresize_handle_event (display, message))
break;
@@ -198,14 +175,8 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
}
break;
case 'b':
case 'B':
display_broadway->last_x = message->pointer.root_x;
display_broadway->last_y = message->pointer.root_y;
display_broadway->last_state = message->pointer.state;
display_broadway->real_mouse_in_toplevel =
g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
case BROADWAY_EVENT_BUTTON_PRESS:
case BROADWAY_EVENT_BUTTON_RELEASE:
if (message->base.type != 'b' &&
_gdk_broadway_moveresize_handle_event (display, message))
break;
@@ -229,13 +200,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
}
break;
case 's':
display_broadway->last_x = message->pointer.root_x;
display_broadway->last_y = message->pointer.root_y;
display_broadway->last_state = message->pointer.state;
display_broadway->real_mouse_in_toplevel =
g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
case BROADWAY_EVENT_SCROLL:
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_window_id));
if (window)
{
@@ -254,10 +219,10 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
}
break;
case 'k':
case 'K':
window = display_broadway->mouse_in_toplevel;
case BROADWAY_EVENT_KEY_PRESS:
case BROADWAY_EVENT_KEY_RELEASE:
window = g_hash_table_lookup (display_broadway->id_ht,
GINT_TO_POINTER (message->key.mouse_window_id));
if (window)
{
event = gdk_event_new (message->base.type == 'k' ? GDK_KEY_PRESS : GDK_KEY_RELEASE);
@@ -269,19 +234,17 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
event->key.length = 0;
gdk_event_set_device (event, display->core_pointer);
display_broadway->last_state = message->key.state;
node = _gdk_event_queue_append (display, event);
_gdk_windowing_got_event (display, node, event, message->base.serial);
}
break;
case 'g':
case 'u':
case BROADWAY_EVENT_GRAB_NOTIFY:
case BROADWAY_EVENT_UNGRAB_NOTIFY:
_gdk_display_device_grab_update (display, display->core_pointer, NULL, message->base.serial);
break;
case 'w':
case BROADWAY_EVENT_CONFIGURE_NOTIFY:
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->configure_notify.id));
if (window)
{
@@ -312,7 +275,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
}
break;
case 'W':
case BROADWAY_EVENT_DELETE_NOTIFY:
window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->delete_notify.id));
if (window)
{
@@ -324,7 +287,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
}
break;
case 'd':
case BROADWAY_EVENT_SCREEN_SIZE_CHANGED:
screen = gdk_display_get_default_screen (display);
window = gdk_screen_get_root_window (screen);
window->width = message->screen_resize_notify.width;
@@ -335,7 +298,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
break;
default:
g_printerr ("Unknown input command %c\n", message->base.type);
g_printerr ("_gdk_broadway_events_got_input - Unknown input command %c\n", message->base.type);
break;
}
}
+1 -2
View File
@@ -126,8 +126,7 @@ GList *_gdk_broadway_screen_list_visuals (GdkScreen *screen);
void _gdk_broadway_screen_size_changed (GdkScreen *screen,
BroadwayInputScreenResizeNotify *msg);
void _gdk_broadway_events_got_input (GdkDisplay *display,
BroadwayInputMsg *message);
void _gdk_broadway_events_got_input (BroadwayInputMsg *message);
void _gdk_broadway_screen_init_root_window (GdkScreen *screen);
void _gdk_broadway_screen_init_visuals (GdkScreen *screen);
+37 -250
View File
@@ -83,95 +83,17 @@ G_DEFINE_TYPE (GdkWindowImplBroadway,
gdk_window_impl_broadway,
GDK_TYPE_WINDOW_IMPL)
static void
diff_surfaces (cairo_surface_t *surface,
cairo_surface_t *old_surface)
{
guint8 *data, *old_data;
guint32 *line, *old_line;
int w, h, stride, old_stride;
int x, y;
data = cairo_image_surface_get_data (surface);
old_data = cairo_image_surface_get_data (old_surface);
w = cairo_image_surface_get_width (surface);
h = cairo_image_surface_get_height (surface);
stride = cairo_image_surface_get_stride (surface);
old_stride = cairo_image_surface_get_stride (old_surface);
for (y = 0; y < h; y++)
{
line = (guint32 *)data;
old_line = (guint32 *)old_data;
for (x = 0; x < w; x++)
{
if ((*line & 0xffffff) == (*old_line & 0xffffff))
*old_line = 0;
else
*old_line = *line | 0xff000000;
line ++;
old_line ++;
}
data += stride;
old_data += old_stride;
}
}
static guint dirty_flush_id = 0;
static void
window_data_send (BroadwayOutput *output, GdkWindowImplBroadway *impl)
{
cairo_t *cr;
if (impl->surface == NULL)
return;
if (impl->last_synced)
{
diff_surfaces (impl->surface,
impl->last_surface);
broadway_output_put_rgba (output, impl->id, 0, 0,
cairo_image_surface_get_width (impl->last_surface),
cairo_image_surface_get_height (impl->last_surface),
cairo_image_surface_get_stride (impl->last_surface),
cairo_image_surface_get_data (impl->last_surface));
}
else
{
impl->last_synced = TRUE;
broadway_output_put_rgb (output, impl->id, 0, 0,
cairo_image_surface_get_width (impl->surface),
cairo_image_surface_get_height (impl->surface),
cairo_image_surface_get_stride (impl->surface),
cairo_image_surface_get_data (impl->surface));
}
broadway_output_surface_flush (output, impl->id);
cr = cairo_create (impl->last_surface);
cairo_set_source_surface (cr, impl->surface, 0, 0);
cairo_paint (cr);
cairo_destroy (cr);
}
static gboolean
dirty_flush_idle (gpointer data)
{
GList *l;
GdkBroadwayDisplay *display;
BroadwayOutput *output;
dirty_flush_id = 0;
display = GDK_BROADWAY_DISPLAY (gdk_display_get_default ());
output = display->output;
if (output == NULL)
return FALSE;
for (l = display->toplevels; l != NULL; l = l->next)
{
@@ -180,11 +102,15 @@ dirty_flush_idle (gpointer data)
if (impl->dirty)
{
impl->dirty = FALSE;
window_data_send (display->output, impl);
_gdk_broadway_server_window_update (display->server,
impl->id,
impl->surface);
}
}
gdk_display_flush (GDK_DISPLAY (display));
/* We sync here to ensure all references to the impl->surface memory
is done, as we may later paint new data in them. */
gdk_display_sync (GDK_DISPLAY (display));
return FALSE;
}
@@ -192,64 +118,10 @@ dirty_flush_idle (gpointer data)
static void
queue_dirty_flush (GdkBroadwayDisplay *display)
{
if (dirty_flush_id == 0 && display->output != NULL)
if (dirty_flush_id == 0)
dirty_flush_id = gdk_threads_add_idle (dirty_flush_idle, NULL);
}
void
_gdk_broadway_resync_windows (void)
{
GdkBroadwayDisplay *display;
GList *l;
dirty_flush_id = 0;
display = GDK_BROADWAY_DISPLAY (gdk_display_get_default ());
/* First create all windows */
for (l = display->toplevels; l != NULL; l = l->next)
{
GdkWindowImplBroadway *impl = l->data;
GdkWindow *window;
window = impl->wrapper;
if (impl->id == 0)
continue; /* Skip root */
impl->dirty = FALSE;
impl->last_synced = FALSE;
broadway_output_new_surface (display->output,
impl->id,
window->x,
window->y,
window->width,
window->height,
window->window_type == GDK_WINDOW_TEMP);
}
/* Then do everything that may reference other windows */
for (l = display->toplevels; l != NULL; l = l->next)
{
GdkWindowImplBroadway *impl = l->data;
if (impl->id == 0)
continue; /* Skip root */
if (impl->transient_for)
broadway_output_set_transient_for (display->output, impl->id, impl->transient_for);
/* Can't check GDK_WINDOW_IS_MAPPED here, because that doesn't correctly handle
withdrawn windows like menus */
if (impl->visible)
{
broadway_output_show_surface (display->output, impl->id);
window_data_send (display->output, impl);
}
}
gdk_display_flush (GDK_DISPLAY (display));
}
static void
gdk_window_impl_broadway_init (GdkWindowImplBroadway *impl)
{
@@ -275,12 +147,6 @@ gdk_window_impl_broadway_finalize (GObject *object)
broadway_display = GDK_BROADWAY_DISPLAY (gdk_window_get_display (impl->wrapper));
if (broadway_display->mouse_in_toplevel == GDK_WINDOW (wrapper))
{
/* TODO: Send leave + enter event, update cursors, etc */
broadway_display->mouse_in_toplevel = NULL;
}
g_hash_table_remove (broadway_display->id_ht, GINT_TO_POINTER(impl->id));
if (impl->cursor)
@@ -315,6 +181,7 @@ _gdk_broadway_screen_init_root_window (GdkScreen * screen)
impl->screen = screen;
impl->wrapper = window;
impl->id = 0;
window->window_type = GDK_WINDOW_ROOT;
window->depth = 24;
@@ -341,13 +208,17 @@ _gdk_broadway_display_create_window_impl (GdkDisplay *display,
{
GdkWindowImplBroadway *impl;
GdkBroadwayDisplay *broadway_display;
static int current_id = 1; /* 0 is the root window */
broadway_display = GDK_BROADWAY_DISPLAY (display);
impl = g_object_new (GDK_TYPE_WINDOW_IMPL_BROADWAY, NULL);
window->impl = (GdkWindowImpl *)impl;
impl->id = current_id++;
impl->id = _gdk_broadway_server_new_window (broadway_display->server,
window->x,
window->y,
window->width,
window->height,
window->window_type == GDK_WINDOW_TEMP);
g_hash_table_insert (broadway_display->id_ht, GINT_TO_POINTER(impl->id), window);
impl->wrapper = window;
@@ -358,37 +229,22 @@ _gdk_broadway_display_create_window_impl (GdkDisplay *display,
g_assert (GDK_WINDOW_TYPE (window->parent) == GDK_WINDOW_ROOT);
broadway_display->toplevels = g_list_prepend (broadway_display->toplevels, impl);
if (broadway_display->output)
broadway_output_new_surface (broadway_display->output,
impl->id,
window->x,
window->y,
window->width,
window->height,
window->window_type == GDK_WINDOW_TEMP);
}
void
_gdk_broadway_window_resize_surface (GdkWindow *window)
{
GdkWindowImplBroadway *impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
cairo_surface_t *old, *last_old;
cairo_surface_t *old;
if (impl->surface)
{
old = impl->surface;
last_old = impl->last_surface;
impl->surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
gdk_window_get_width (impl->wrapper),
gdk_window_get_height (impl->wrapper));
impl->last_surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
gdk_window_get_width (impl->wrapper),
gdk_window_get_height (impl->wrapper));
impl->surface = _gdk_broadway_server_create_surface (gdk_window_get_width (impl->wrapper),
gdk_window_get_height (impl->wrapper));
cairo_surface_destroy (old);
cairo_surface_destroy (last_old);
}
if (impl->ref_surface)
@@ -413,7 +269,6 @@ static cairo_surface_t *
gdk_window_broadway_ref_cairo_surface (GdkWindow *window)
{
GdkWindowImplBroadway *impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
cairo_t *cr;
int w, h;
if (GDK_IS_WINDOW_IMPL_BROADWAY (window) &&
@@ -425,22 +280,7 @@ gdk_window_broadway_ref_cairo_surface (GdkWindow *window)
/* Create actual backing store if missing */
if (!impl->surface)
{
impl->surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, w, h);
impl->last_surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, w, h);
cr = cairo_create (impl->surface);
cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
cairo_rectangle (cr, 0, 0, w, h);
cairo_fill (cr);
cairo_destroy (cr);
cr = cairo_create (impl->last_surface);
cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
cairo_rectangle (cr, 0, 0, w, h);
cairo_fill (cr);
cairo_destroy (cr);
}
impl->surface = _gdk_broadway_server_create_surface (w, h);
/* Create a destroyable surface referencing the real one */
if (!impl->ref_surface)
@@ -485,16 +325,13 @@ _gdk_broadway_window_destroy (GdkWindow *window,
{
cairo_surface_destroy (impl->surface);
impl->surface = NULL;
cairo_surface_destroy (impl->last_surface);
impl->last_surface = NULL;
}
broadway_display = GDK_BROADWAY_DISPLAY (gdk_window_get_display (window));
g_hash_table_remove (broadway_display->id_ht, GINT_TO_POINTER(impl->id));
if (broadway_display->output)
broadway_output_destroy_surface (broadway_display->output,
impl->id);
_gdk_broadway_server_destroy_window (broadway_display->server,
impl->id);
}
static cairo_surface_t *
@@ -546,11 +383,9 @@ gdk_window_broadway_show (GdkWindow *window, gboolean already_mapped)
_gdk_make_event (GDK_WINDOW (window), GDK_MAP, NULL, FALSE);
broadway_display = GDK_BROADWAY_DISPLAY (gdk_window_get_display (window));
if (broadway_display->output)
{
broadway_output_show_surface (broadway_display->output, impl->id);
queue_dirty_flush (broadway_display);
}
if (_gdk_broadway_server_window_show (broadway_display->server, impl->id))
queue_dirty_flush (broadway_display);
}
static void
@@ -569,17 +404,8 @@ gdk_window_broadway_hide (GdkWindow *window)
_gdk_make_event (GDK_WINDOW (window), GDK_UNMAP, NULL, FALSE);
broadway_display = GDK_BROADWAY_DISPLAY (gdk_window_get_display (window));
if (broadway_display->output)
{
broadway_output_hide_surface (broadway_display->output, impl->id);
queue_dirty_flush (broadway_display);
}
if (broadway_display->mouse_in_toplevel == window)
{
/* TODO: Send leave + enter event, update cursors, etc */
broadway_display->mouse_in_toplevel = NULL;
}
if (_gdk_broadway_server_window_hide (broadway_display->server, impl->id))
queue_dirty_flush (broadway_display);
_gdk_window_clear_update_area (window);
}
@@ -601,7 +427,6 @@ gdk_window_broadway_move_resize (GdkWindow *window,
GdkWindowImplBroadway *impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
GdkBroadwayDisplay *broadway_display;
gboolean changed, size_changed;;
gboolean with_resize;
size_changed = changed = FALSE;
@@ -613,10 +438,8 @@ gdk_window_broadway_move_resize (GdkWindow *window,
window->y = y;
}
with_resize = FALSE;
if (width > 0 || height > 0)
{
with_resize = TRUE;
if (width < 1)
width = 1;
@@ -644,12 +467,11 @@ gdk_window_broadway_move_resize (GdkWindow *window,
GdkEvent *event;
GList *node;
if (broadway_display->output != NULL)
if (_gdk_broadway_server_window_move_resize (broadway_display->server,
impl->id,
window->x, window->y,
window->width, window->height))
{
broadway_output_move_resize_surface (broadway_display->output,
impl->id,
with_move, window->x, window->y,
with_resize, window->width, window->height);
queue_dirty_flush (broadway_display);
if (size_changed)
window->resize_count++;
@@ -787,11 +609,7 @@ gdk_broadway_window_set_transient_for (GdkWindow *window,
impl->transient_for = parent_id;
display = GDK_BROADWAY_DISPLAY (gdk_window_get_display (impl->wrapper));
if (display->output)
{
broadway_output_set_transient_for (display->output, impl->id, impl->transient_for);
gdk_display_flush (GDK_DISPLAY (display));
}
_gdk_broadway_server_window_set_transient_for (display->server, impl->id, impl->transient_for);
}
static void
@@ -1324,20 +1142,10 @@ moveresize_lookahead (GdkDisplay *display,
BroadwayInputMsg *event)
{
GdkBroadwayDisplay *broadway_display;
BroadwayInputMsg *message;
GList *l;
broadway_display = GDK_BROADWAY_DISPLAY (display);
for (l = broadway_display->input_messages; l != NULL; l = l->next)
{
message = l->data;
if (message->base.type == 'm')
return FALSE;
if (message->base.type == 'b')
return FALSE;
}
return TRUE;
return !_gdk_broadway_server_lookahead_event (broadway_display->server, "mb");
}
gboolean
@@ -1480,8 +1288,6 @@ gdk_broadway_window_begin_resize_drag (GdkWindow *window,
/* We need a connection to be able to get mouse events, if not, punt */
broadway_display = GDK_BROADWAY_DISPLAY (gdk_window_get_display (window));
if (!broadway_display->output)
return;
mv_resize = get_move_resize_data (GDK_WINDOW_DISPLAY (window), TRUE);
@@ -1622,9 +1428,6 @@ _gdk_broadway_window_translate (GdkWindow *window,
{
GdkWindowImplBroadway *impl;
GdkBroadwayDisplay *broadway_display;
int n_rects, i;
BroadwayRect *rects;
cairo_rectangle_int_t rect;
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
@@ -1632,26 +1435,11 @@ _gdk_broadway_window_translate (GdkWindow *window,
{
copy_region (impl->surface, area, dx, dy);
broadway_display = GDK_BROADWAY_DISPLAY (gdk_window_get_display (window));
if (GDK_WINDOW_IMPL_BROADWAY (impl)->last_synced &&
broadway_display->output)
{
copy_region (impl->last_surface, area, dx, dy);
n_rects = cairo_region_num_rectangles (area);
rects = g_new (BroadwayRect, n_rects);
for (i = 0; i < n_rects; i++)
{
cairo_region_get_rectangle (area, i, &rect);
rects[i].x = rect.x;
rects[i].y = rect.y;
rects[i].width = rect.width;
rects[i].height = rect.height;
}
broadway_output_copy_rectangles (broadway_display->output,
GDK_WINDOW_IMPL_BROADWAY (impl)->id,
rects, n_rects, dx, dy);
queue_dirty_flush (broadway_display);
g_free (rects);
}
if (_gdk_broadway_server_window_translate (broadway_display->server,
impl->id,
area, dx, dy))
queue_dirty_flush (broadway_display);
}
}
@@ -1661,8 +1449,7 @@ gdk_broadway_get_last_seen_time (GdkWindow *window)
GdkDisplay *display;
display = gdk_window_get_display (window);
_gdk_broadway_display_consume_all_input (display);
return (guint32) GDK_BROADWAY_DISPLAY (display)->last_seen_time;
return _gdk_broadway_server_get_last_seen_time (GDK_BROADWAY_DISPLAY (display)->server);
}
static void
+3 -3
View File
@@ -18,13 +18,13 @@
* Author: Alexander Larsson <alexl@redhat.com>
*/
#ifndef __GDK_APP_LAUNCH_CONTEXT_H__
#define __GDK_APP_LAUNCH_CONTEXT_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_APP_LAUNCH_CONTEXT_H__
#define __GDK_APP_LAUNCH_CONTEXT_H__
#include <gio/gio.h>
#include <gdk/gdkversionmacros.h>
#include <gdk/gdktypes.h>
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_CAIRO_H__
#define __GDK_CAIRO_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_CAIRO_H__
#define __GDK_CAIRO_H__
#include <gdk/gdkversionmacros.h>
#include <gdk/gdkcolor.h>
#include <gdk/gdkrgba.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_COLOR_H__
#define __GDK_COLOR_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_COLOR_H__
#define __GDK_COLOR_H__
#include <cairo.h>
#include <gdk/gdktypes.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_CURSOR_H__
#define __GDK_CURSOR_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_CURSOR_H__
#define __GDK_CURSOR_H__
#include <gdk/gdkversionmacros.h>
#include <gdk/gdktypes.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_DEVICE_H__
#define __GDK_DEVICE_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_DEVICE_H__
#define __GDK_DEVICE_H__
#include <gdk/gdktypes.h>
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_DEVICE_MANAGER_H__
#define __GDK_DEVICE_MANAGER_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_DEVICE_MANAGER_H__
#define __GDK_DEVICE_MANAGER_H__
#include <gdk/gdktypes.h>
#include <gdk/gdkdevice.h>
+3 -3
View File
@@ -19,13 +19,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_DISPLAY_H__
#define __GDK_DISPLAY_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_DISPLAY_H__
#define __GDK_DISPLAY_H__
#include <gdk/gdkversionmacros.h>
#include <gdk/gdktypes.h>
#include <gdk/gdkevents.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_DISPLAY_MANAGER_H__
#define __GDK_DISPLAY_MANAGER_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_DISPLAY_MANAGER_H__
#define __GDK_DISPLAY_MANAGER_H__
#include <gdk/gdktypes.h>
#include <gdk/gdkdisplay.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_DND_H__
#define __GDK_DND_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_DND_H__
#define __GDK_DND_H__
#include <gdk/gdktypes.h>
#include <gdk/gdkdevice.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_EVENTS_H__
#define __GDK_EVENTS_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_EVENTS_H__
#define __GDK_EVENTS_H__
#include <gdk/gdkversionmacros.h>
#include <gdk/gdkcolor.h>
#include <gdk/gdktypes.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_KEYS_H__
#define __GDK_KEYS_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_KEYS_H__
#define __GDK_KEYS_H__
#include <gdk/gdkversionmacros.h>
#include <gdk/gdktypes.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_MAIN_H__
#define __GDK_MAIN_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_MAIN_H__
#define __GDK_MAIN_H__
#include <gdk/gdkversionmacros.h>
#include <gdk/gdktypes.h>
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_PANGO_H__
#define __GDK_PANGO_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_PANGO_H__
#define __GDK_PANGO_H__
#include <gdk/gdktypes.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_PIXBUF_H__
#define __GDK_PIXBUF_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_PIXBUF_H__
#define __GDK_PIXBUF_H__
#include <cairo.h>
#include <gdk/gdktypes.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_PROPERTY_H__
#define __GDK_PROPERTY_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_PROPERTY_H__
#define __GDK_PROPERTY_H__
#include <gdk/gdktypes.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_RECTANGLE_H__
#define __GDK_RECTANGLE_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_RECTANGLE_H__
#define __GDK_RECTANGLE_H__
#include <gdk/gdktypes.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_RGBA_H__
#define __GDK_RGBA_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_RGBA_H__
#define __GDK_RGBA_H__
#include <gdk/gdktypes.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -19,13 +19,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_SCREEN_H__
#define __GDK_SCREEN_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_SCREEN_H__
#define __GDK_SCREEN_H__
#include <cairo.h>
#include <gdk/gdkversionmacros.h>
#include <gdk/gdktypes.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_SELECTION_H__
#define __GDK_SELECTION_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_SELECTION_H__
#define __GDK_SELECTION_H__
#include <gdk/gdktypes.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -16,13 +16,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_TEST_UTILS_H__
#define __GDK_TEST_UTILS_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_TEST_UTILS_H__
#define __GDK_TEST_UTILS_H__
#include <gdk/gdkwindow.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_THREADS_H__
#define __GDK_THREADS_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_THREADS_H__
#define __GDK_THREADS_H__
#include <gdk/gdktypes.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_TYPES_H__
#define __GDK_TYPES_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_TYPES_H__
#define __GDK_TYPES_H__
/* GDK uses "glib". (And so does GTK).
*/
#include <glib.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_VISUAL_H__
#define __GDK_VISUAL_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_VISUAL_H__
#define __GDK_VISUAL_H__
#include <gdk/gdktypes.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_WINDOW_H__
#define __GDK_WINDOW_H__
#if !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif
#ifndef __GDK_WINDOW_H__
#define __GDK_WINDOW_H__
#include <gdk/gdkversionmacros.h>
#include <gdk/gdktypes.h>
#include <gdk/gdkevents.h>
+3 -3
View File
@@ -17,13 +17,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_QUARTZ_CURSOR_H__
#define __GDK_QUARTZ_CURSOR_H__
#if !defined(__GDKQUARTZ_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkquartz.h> can be included directly."
#endif
#ifndef __GDK_QUARTZ_CURSOR_H__
#define __GDK_QUARTZ_CURSOR_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_QUARTZ_DEVICE_CORE_H__
#define __GDK_QUARTZ_DEVICE_CORE_H__
#if !defined(__GDKQUARTZ_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkquartz.h> can be included directly."
#endif
#ifndef __GDK_QUARTZ_DEVICE_CORE_H__
#define __GDK_QUARTZ_DEVICE_CORE_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_QUARTZ_DEVICE_MANAGER_CORE_H__
#define __GDK_QUARTZ_DEVICE_MANAGER_CORE_H__
#if !defined(__GDKQUARTZ_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkquartz.h> can be included directly."
#endif
#ifndef __GDK_QUARTZ_DEVICE_MANAGER_CORE_H__
#define __GDK_QUARTZ_DEVICE_MANAGER_CORE_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -17,13 +17,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_QUARTZ_DISPLAY_H__
#define __GDK_QUARTZ_DISPLAY_H__
#if !defined(__GDKQUARTZ_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkquartz.h> can be included directly."
#endif
#ifndef __GDK_QUARTZ_DISPLAY_H__
#define __GDK_QUARTZ_DISPLAY_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -17,13 +17,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_QUARTZ_DISPLAY_MANAGER_H__
#define __GDK_QUARTZ_DISPLAY_MANAGER_H__
#if !defined(__GDKQUARTZ_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkquartz.h> can be included directly."
#endif
#ifndef __GDK_QUARTZ_DISPLAY_MANAGER_H__
#define __GDK_QUARTZ_DISPLAY_MANAGER_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -16,13 +16,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_QUARTZ_DND_H__
#define __GDK_QUARTZ_DND_H__
#if !defined(__GDKQUARTZ_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkquartz.h> can be included directly."
#endif
#ifndef __GDK_QUARTZ_DND_H__
#define __GDK_QUARTZ_DND_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -17,13 +17,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_QUARTZ_KEYS_H__
#define __GDK_QUARTZ_KEYS_H__
#if !defined (__GDKQUARTZ_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkquartz.h> can be included directly."
#endif
#ifndef __GDK_QUARTZ_KEYS_H__
#define __GDK_QUARTZ_KEYS_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -16,13 +16,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_QUARTZ_SCREEN_H__
#define __GDK_QUARTZ_SCREEN_H__
#if !defined(__GDKQUARTZ_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkquartz.h> can be included directly."
#endif
#ifndef __GDK_QUARTZ_SCREEN_H__
#define __GDK_QUARTZ_SCREEN_H__
G_BEGIN_DECLS
#include <gdk/gdk.h>
+3 -3
View File
@@ -17,13 +17,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_QUARTZ_UTILS_H__
#define __GDK_QUARTZ_UTILS_H__
#if !defined (__GDKQUARTZ_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkquartz.h> can be included directly."
#endif
#ifndef __GDK_QUARTZ_UTILS_H__
#define __GDK_QUARTZ_UTILS_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -17,13 +17,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_QUARTZ_VISUAL_H__
#define __GDK_QUARTZ_VISUAL_H__
#if !defined (__GDKQUARTZ_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkquartz.h> can be included directly."
#endif
#ifndef __GDK_QUARTZ_VISUAL_H__
#define __GDK_QUARTZ_VISUAL_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -17,13 +17,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_QUARTZ_WINDOW_H__
#define __GDK_QUARTZ_WINDOW_H__
#if !defined (__GDKQUARTZ_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkquartz.h> can be included directly."
#endif
#ifndef __GDK_QUARTZ_WINDOW_H__
#define __GDK_QUARTZ_WINDOW_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_WIN32_CURSOR_H__
#define __GDK_WIN32_CURSOR_H__
#if !defined (__GDKWIN32_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkwin32.h> can be included directly."
#endif
#ifndef __GDK_WIN32_CURSOR_H__
#define __GDK_WIN32_CURSOR_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_WIN32_DISPLAY_H__
#define __GDK_WIN32_DISPLAY_H__
#if !defined (__GDKWIN32_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkwin32.h> can be included directly."
#endif
#ifndef __GDK_WIN32_DISPLAY_H__
#define __GDK_WIN32_DISPLAY_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_WIN32_DISPLAY_MANAGER_H__
#define __GDK_WIN32_DISPLAY_MANAGER_H__
#if !defined (__GDKWIN32_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkwin32.h> can be included directly."
#endif
#ifndef __GDK_WIN32_DISPLAY_MANAGER_H__
#define __GDK_WIN32_DISPLAY_MANAGER_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_WIN32_DND_H__
#define __GDK_WIN32_DND_H__
#if !defined (__GDKWIN32_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkwin32.h> can be included directly."
#endif
#ifndef __GDK_WIN32_DND_H__
#define __GDK_WIN32_DND_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_WIN32_KEYS_H__
#define __GDK_WIN32_KEYS_H__
#if !defined (__GDKWIN32_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkwin32.h> can be included directly."
#endif
#ifndef __GDK_WIN32_KEYS_H__
#define __GDK_WIN32_KEYS_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_WIN32_SCREEN_H__
#define __GDK_WIN32_SCREEN_H__
#if !defined (__GDKWIN32_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkwin32.h> can be included directly."
#endif
#ifndef __GDK_WIN32_SCREEN_H__
#define __GDK_WIN32_SCREEN_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_WIN32_WINDOW_H__
#define __GDK_WIN32_WINDOW_H__
#if !defined (__GDKWIN32_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkwin32.h> can be included directly."
#endif
#ifndef __GDK_WIN32_WINDOW_H__
#define __GDK_WIN32_WINDOW_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_X11_APP_LAUNCH_CONTEXT_H__
#define __GDK_X11_APP_LAUNCH_CONTEXT_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_APP_LAUNCH_CONTEXT_H__
#define __GDK_X11_APP_LAUNCH_CONTEXT_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_X11_CURSOR_H__
#define __GDK_X11_CURSOR_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_CURSOR_H__
#define __GDK_X11_CURSOR_H__
#include <gdk/gdk.h>
#include <X11/Xlib.h>
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_X11_DEVICE_H__
#define __GDK_X11_DEVICE_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_DEVICE_H__
#define __GDK_X11_DEVICE_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_X11_DEVICE_MANAGER_H__
#define __GDK_X11_DEVICE_MANAGER_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_DEVICE_MANAGER_H__
#define __GDK_X11_DEVICE_MANAGER_H__
#include <gdk/gdk.h>
#include <X11/Xlib.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_X11_DISPLAY_H__
#define __GDK_X11_DISPLAY_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_DISPLAY_H__
#define __GDK_X11_DISPLAY_H__
#include <gdk/gdk.h>
#include <X11/Xlib.h>
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_X11_DISPLAY_MANAGER_H__
#define __GDK_X11_DISPLAY_MANAGER_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_DISPLAY_MANAGER_H__
#define __GDK_X11_DISPLAY_MANAGER_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_X11_DND_H__
#define __GDK_X11_DND_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_DND_H__
#define __GDK_X11_DND_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -15,13 +15,13 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_X11_KEYS_H__
#define __GDK_X11_KEYS_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_KEYS_H__
#define __GDK_X11_KEYS_H__
#include <gdk/gdk.h>
G_BEGIN_DECLS
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_X11_PROPERTY_H__
#define __GDK_X11_PROPERTY_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_PROPERTY_H__
#define __GDK_X11_PROPERTY_H__
#include <gdk/gdk.h>
#include <X11/Xlib.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_X11_SCREEN_H__
#define __GDK_X11_SCREEN_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_SCREEN_H__
#define __GDK_X11_SCREEN_H__
#include <gdk/gdk.h>
#include <X11/Xlib.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_X11_SELECTION_H__
#define __GDK_X11_SELECTION_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_SELECTION_H__
#define __GDK_X11_SELECTION_H__
#include <gdk/gdk.h>
#include <X11/Xlib.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_X11_UTILS_H__
#define __GDK_X11_UTILS_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_UTILS_H__
#define __GDK_X11_UTILS_H__
#include <gdk/gdk.h>
#include <X11/Xlib.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_X11_VISUAL_H__
#define __GDK_X11_VISUAL_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_VISUAL_H__
#define __GDK_X11_VISUAL_H__
#include <gdk/gdk.h>
#include <X11/Xlib.h>
+3 -3
View File
@@ -22,13 +22,13 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
#ifndef __GDK_X11_WINDOW_H__
#define __GDK_X11_WINDOW_H__
#if !defined (__GDKX_H_INSIDE__) && !defined (GDK_COMPILATION)
#error "Only <gdk/gdkx.h> can be included directly."
#endif
#ifndef __GDK_X11_WINDOW_H__
#define __GDK_X11_WINDOW_H__
#include <gdk/gdk.h>
#include <X11/Xlib.h>
+6 -3
View File
@@ -16,7 +16,7 @@ else
GTK_PRINT_PREVIEW_COMMAND="evince --unlink-tempfile --preview --print-settings %s %f"
endif
SUBDIRS = a11y . tests
SUBDIRS = a11y actors . tests
if HAVE_PAPI_CUPS
GTK_PRINT_BACKENDS=file,papi,cups
@@ -107,12 +107,14 @@ endif
libgtkincludedir = $(includedir)/gtk-3.0/gtk
libadd = \
$(top_builddir)/gdk/libgdk-3.la \
$(top_builddir)/gtk/a11y/libgail.la \
$(top_builddir)/gtk/a11y/libgtka11y.la \
$(top_builddir)/gtk/actors/libgtkactors.la \
$(GMODULE_LIBS) \
$(GTK_DEP_LIBS)
deps = \
$(top_builddir)/gdk/libgdk-3.la \
$(top_builddir)/gtk/a11y/libgail.la
$(top_builddir)/gtk/a11y/libgtka11y.la \
$(top_builddir)/gtk/actors/libgtkactors.la
# libtool stuff: set version and export symbols for resolving
# since automake doesn't support conditionalized libsomething_la_LDFLAGS
@@ -176,6 +178,7 @@ deprecated_private_h_sources = \
gtk_public_h_sources = \
gtk.h \
gtkx.h \
gtk-a11y.h \
gtkaboutdialog.h \
gtkaccelgroup.h \
gtkaccellabel.h \
+34 -27
View File
@@ -1,9 +1,11 @@
include $(top_srcdir)/Makefile.decl
noinst_LTLIBRARIES = libgail.la
noinst_LTLIBRARIES = libgtka11y.la
gail_c_sources = \
gail.c \
gtka11y_c_sources = \
gtkaccessibility.c \
gtkaccessibilitymisc.c \
gtkaccessibilityutil.c \
gtkarrowaccessible.c \
gtkbooleancellaccessible.c \
gtkbuttonaccessible.c \
@@ -36,7 +38,6 @@ gail_c_sources = \
gtkrenderercellaccessible.c \
gtkscaleaccessible.c \
gtkscalebuttonaccessible.c \
gtkscrollbaraccessible.c \
gtkscrolledwindowaccessible.c \
gtkspinbuttonaccessible.c \
gtkspinneraccessible.c \
@@ -48,19 +49,16 @@ gail_c_sources = \
gtktoplevelaccessible.c \
gtktreeviewaccessible.c \
gtkwidgetaccessible.c \
gtkwindowaccessible.c \
gailutil.c \
gailmisc.c
gtkwindowaccessible.c
gail_private_h_sources = \
gail.h \
gtka11yincludedir = $(includedir)/gtk-3.0/gtk/a11y
gtka11yinclude_HEADERS = \
gtkarrowaccessible.h \
gtkbooleancellaccessible.h \
gtkbuttonaccessible.h \
gtkcellaccessible.h \
gtkcellaccessibleparent.h \
gtkcheckmenuitemaccessible.h \
gtkcolorswatchaccessible.h \
gtkcomboboxaccessible.h \
gtkcontaineraccessible.h \
gtkcontainercellaccessible.h \
@@ -74,8 +72,8 @@ gail_private_h_sources = \
gtklinkbuttonaccessible.h \
gtklockbuttonaccessible.h \
gtkmenuaccessible.h \
gtkmenushellaccessible.h \
gtkmenuitemaccessible.h \
gtkmenushellaccessible.h \
gtknotebookaccessible.h \
gtknotebookpageaccessible.h \
gtkpanedaccessible.h \
@@ -86,7 +84,6 @@ gail_private_h_sources = \
gtkrenderercellaccessible.h \
gtkscaleaccessible.h \
gtkscalebuttonaccessible.h \
gtkscrollbaraccessible.h \
gtkscrolledwindowaccessible.h \
gtkspinbuttonaccessible.h \
gtkspinneraccessible.h \
@@ -98,15 +95,25 @@ gail_private_h_sources = \
gtktoplevelaccessible.h \
gtktreeviewaccessible.h \
gtkwidgetaccessible.h \
gtkwindowaccessible.h \
gailutil.h \
gailmisc.h
gtkwindowaccessible.h
libgail_la_SOURCES = \
$(gail_c_sources) \
$(gail_private_h_sources)
gtka11y_private_h_sources = \
gtkaccessibility.h \
gtkaccessibilitymisc.h \
gtkaccessibilityutil.h \
gtkcellaccessibleprivate.h \
gtkcolorswatchaccessibleprivate.h \
gtkiconviewaccessibleprivate.h \
gtklockbuttonaccessibleprivate.h \
gtktextviewaccessibleprivate.h \
gtktreeviewaccessibleprivate.h \
gtkwidgetaccessibleprivate.h
libgail_la_CPPFLAGS = \
libgtka11y_la_SOURCES = \
$(gtka11y_c_sources) \
$(gtka11y_private_h_sources)
libgtka11y_la_CPPFLAGS = \
-I$(top_srcdir) \
-I$(top_srcdir)/gdk \
-I$(top_builddir)/gdk \
@@ -116,18 +123,18 @@ libgail_la_CPPFLAGS = \
-DGTK_COMPILATION \
$(AM_CPPFLAGS)
libgail_la_CFLAGS = \
$(GTK_DEP_CFLAGS) \
$(GTK_DEBUG_FLAGS) \
libgtka11y_la_CFLAGS = \
$(GTK_DEP_CFLAGS) \
$(GTK_DEBUG_FLAGS) \
$(AM_CFLAGS)
libgail_la_LIBADD = \
$(GTK_DEP_LIBS) \
libgtka11y_la_LIBADD = \
$(GTK_DEP_LIBS) \
$(INTLLIBS)
libgail_la_LDFLAGS = \
libgtka11y_la_LDFLAGS = \
$(LDFLAGS)
dist-hook: ../../build/win32/vs9/libgail.vcproj ../../build/win32/vs10/libgail.vcxproj ../../build/win32/vs10/libgail.vcxproj.filters
../../build/win32/vs9/libgail.vcproj: ../../build/win32/vs9/libgail.vcprojin
@@ -139,7 +146,7 @@ dist-hook: ../../build/win32/vs9/libgail.vcproj ../../build/win32/vs10/libgail.v
done >libgail.sourcefiles
$(CPP) -P - <$(top_srcdir)/build/win32/vs9/libgail.vcprojin >$@
rm libgail.sourcefiles
../../build/win32/vs10/libgail.vcxproj: ../../build/win32/vs10/libgail.vcxprojin
for F in $(libgail_la_SOURCES); do \
case $$F in \
-49
View File
@@ -1,49 +0,0 @@
/* GAIL - The GNOME Accessibility Implementation Library
* Copyright 2001 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 __GAIL_MISC_H__
#define __GAIL_MISC_H__
#include <atk/atk.h>
G_BEGIN_DECLS
#define GAIL_TYPE_MISC (_gail_misc_get_type ())
#define GAIL_MISC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAIL_TYPE_MISC, GailMisc))
#define GAIL_MISC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAIL_TYPE_MISC, GailMiscClass))
#define GAIL_IS_MISC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAIL_TYPE_MISC))
#define GAIL_IS_MISC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAIL_TYPE_MISC))
#define GAIL_MISC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GAIL_TYPE_MISC, GailMiscClass))
typedef struct _GailMisc GailMisc;
typedef struct _GailMiscClass GailMiscClass;
struct _GailMisc
{
AtkMisc parent;
};
struct _GailMiscClass
{
AtkMiscClass parent_class;
};
GType _gail_misc_get_type (void);
G_END_DECLS
#endif /* __GAIL_MISC_H__ */
-373
View File
@@ -1,373 +0,0 @@
/* GAIL - The GNOME Accessibility Implementation Library
* Copyright 2011, F123 Consulting & Mais Diferenças
* Copyright 2001, 2002, 2003 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
* 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <stdlib.h>
#include <gtk/gtk.h>
#include "gailutil.h"
#include "gtktoplevelaccessible.h"
#include "gtkwindowaccessible.h"
static GSList *key_listener_list = NULL;
typedef struct _GailKeyEventInfo GailKeyEventInfo;
struct _GailKeyEventInfo
{
AtkKeyEventStruct *key_event;
gpointer func_data;
};
static gboolean
state_event_watcher (GSignalInvocationHint *hint,
guint n_param_values,
const GValue *param_values,
gpointer data)
{
GObject *object;
GtkWidget *widget;
AtkObject *atk_obj;
AtkObject *parent;
GdkEventWindowState *event;
gchar *signal_name;
object = g_value_get_object (param_values + 0);
if (!GTK_IS_WINDOW (object))
return FALSE;
event = g_value_get_boxed (param_values + 1);
if (event->type == GDK_WINDOW_STATE)
return FALSE;
widget = GTK_WIDGET (object);
if (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED)
signal_name = "maximize";
else if (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)
signal_name = "minimize";
else if (event->new_window_state == 0)
signal_name = "restore";
else
return TRUE;
atk_obj = gtk_widget_get_accessible (widget);
if (GTK_IS_WINDOW_ACCESSIBLE (atk_obj))
{
parent = atk_object_get_parent (atk_obj);
if (parent == atk_get_root ())
g_signal_emit_by_name (atk_obj, signal_name);
return TRUE;
}
return FALSE;
}
static gboolean
configure_event_watcher (GSignalInvocationHint *hint,
guint n_param_values,
const GValue *param_values,
gpointer data)
{
GtkAllocation allocation;
GObject *object;
GtkWidget *widget;
AtkObject *atk_obj;
AtkObject *parent;
GdkEvent *event;
gchar *signal_name;
object = g_value_get_object (param_values + 0);
if (!GTK_IS_WINDOW (object))
return FALSE;
event = g_value_get_boxed (param_values + 1);
if (event->type != GDK_CONFIGURE)
return FALSE;
widget = GTK_WIDGET (object);
gtk_widget_get_allocation (widget, &allocation);
if (allocation.x == ((GdkEventConfigure *)event)->x &&
allocation.y == ((GdkEventConfigure *)event)->y &&
allocation.width == ((GdkEventConfigure *)event)->width &&
allocation.height == ((GdkEventConfigure *)event)->height)
return TRUE;
if (allocation.width != ((GdkEventConfigure *)event)->width ||
allocation.height != ((GdkEventConfigure *)event)->height)
signal_name = "resize";
else
signal_name = "move";
atk_obj = gtk_widget_get_accessible (widget);
if (GTK_IS_WINDOW_ACCESSIBLE (atk_obj))
{
parent = atk_object_get_parent (atk_obj);
if (parent == atk_get_root ())
g_signal_emit_by_name (atk_obj, signal_name);
return TRUE;
}
return FALSE;
}
static gboolean
window_focus (GtkWidget *widget,
GdkEventFocus *event)
{
AtkObject *atk_obj;
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
atk_obj = gtk_widget_get_accessible (widget);
g_signal_emit_by_name (atk_obj, event->in ? "activate" : "deactivate");
return FALSE;
}
static void
window_added (AtkObject *atk_obj,
guint index,
AtkObject *child)
{
GtkWidget *widget;
if (!GTK_IS_WINDOW_ACCESSIBLE (child))
return;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (child));
if (!widget)
return;
g_signal_connect (widget, "focus-in-event", (GCallback) window_focus, NULL);
g_signal_connect (widget, "focus-out-event", (GCallback) window_focus, NULL);
g_signal_emit_by_name (child, "create");
}
static void
window_removed (AtkObject *atk_obj,
guint index,
AtkObject *child)
{
GtkWidget *widget;
GtkWindow *window;
if (!GTK_IS_WINDOW_ACCESSIBLE (child))
return;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (child));
if (!widget)
return;
window = GTK_WINDOW (widget);
/*
* Deactivate window if it is still focused and we are removing it. This
* can happen when a dialog displayed by gok is removed.
*/
if (gtk_window_is_active (window) &&
gtk_window_has_toplevel_focus (window))
g_signal_emit_by_name (child, "deactivate");
g_signal_handlers_disconnect_by_func (widget, (gpointer) window_focus, NULL);
g_signal_emit_by_name (child, "destroy");
}
static void
do_window_event_initialization (void)
{
AtkObject *root;
g_type_class_ref (GTK_TYPE_WINDOW_ACCESSIBLE);
g_signal_add_emission_hook (g_signal_lookup ("window-state-event", GTK_TYPE_WIDGET),
0, state_event_watcher, NULL, (GDestroyNotify) NULL);
g_signal_add_emission_hook (g_signal_lookup ("configure-event", GTK_TYPE_WIDGET),
0, configure_event_watcher, NULL, (GDestroyNotify) NULL);
root = atk_get_root ();
g_signal_connect (root, "children-changed::add",
(GCallback) window_added, NULL);
g_signal_connect (root, "children-changed::remove",
(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)
{
AtkKeyEventStruct *event = g_new0 (AtkKeyEventStruct, 1);
switch (key->type)
{
case GDK_KEY_PRESS:
event->type = ATK_KEY_EVENT_PRESS;
break;
case GDK_KEY_RELEASE:
event->type = ATK_KEY_EVENT_RELEASE;
break;
default:
g_assert_not_reached ();
return NULL;
}
event->state = key->state;
event->keyval = key->keyval;
event->length = key->length;
if (key->string && key->string [0] &&
(key->state & GDK_CONTROL_MASK ||
g_unichar_isgraph (g_utf8_get_char (key->string))))
{
event->string = key->string;
}
else if (key->type == GDK_KEY_PRESS ||
key->type == GDK_KEY_RELEASE)
{
event->string = gdk_keyval_name (key->keyval);
}
event->keycode = key->hardware_keycode;
event->timestamp = key->time;
#ifdef GAIL_DEBUG
g_print ("GailKey:\tsym %u\n\tmods %x\n\tcode %u\n\ttime %lx\n",
(unsigned int) event->keyval,
(unsigned int) event->state,
(unsigned int) event->keycode,
(unsigned long int) event->timestamp);
#endif
return event;
}
typedef struct {
AtkKeySnoopFunc func;
gpointer data;
guint key;
} KeyEventListener;
gboolean
_gail_util_key_snooper (GtkWidget *the_widget,
GdkEventKey *event)
{
GSList *l;
AtkKeyEventStruct *atk_event;
gboolean result;
atk_event = atk_key_event_from_gdk_event_key (event);
result = FALSE;
for (l = key_listener_list; l; l = l->next)
{
KeyEventListener *listener = l->data;
result |= listener->func (atk_event, listener->data);
}
g_free (atk_event);
return result;
}
static guint
gail_util_add_key_event_listener (AtkKeySnoopFunc listener_func,
gpointer listener_data)
{
static guint key = 0;
KeyEventListener *listener;
key++;
listener = g_slice_new0 (KeyEventListener);
listener->func = listener_func;
listener->data = listener_data;
listener->key = key;
key_listener_list = g_slist_append (key_listener_list, listener);
return key;
}
static void
gail_util_remove_key_event_listener (guint listener_key)
{
GSList *l;
for (l = key_listener_list; l; l = l->next)
{
KeyEventListener *listener = l->data;
if (listener->key == listener_key)
{
g_slice_free (KeyEventListener, listener);
key_listener_list = g_slist_delete_link (key_listener_list, l);
break;
}
}
}
static AtkObject *
gail_util_get_root (void)
{
static AtkObject *root = NULL;
if (!root)
{
root = g_object_new (GTK_TYPE_TOPLEVEL_ACCESSIBLE, NULL);
atk_object_initialize (root, NULL);
}
return root;
}
static const gchar *
gail_util_get_toolkit_name (void)
{
return "gtk";
}
static const gchar *
gail_util_get_toolkit_version (void)
{
return GTK_VERSION;
}
void
_gail_util_uninstall (void)
{
undo_window_event_initialization ();
}
void
_gail_util_install (void)
{
AtkUtilClass *atk_class = ATK_UTIL_CLASS (g_type_class_ref (ATK_TYPE_UTIL));
atk_class->add_key_event_listener = gail_util_add_key_event_listener;
atk_class->remove_key_event_listener = gail_util_remove_key_event_listener;
atk_class->get_root = gail_util_get_root;
atk_class->get_toolkit_name = gail_util_get_toolkit_name;
atk_class->get_toolkit_version = gail_util_get_toolkit_version;
do_window_event_initialization ();
}
+198 -14
View File
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
/* GTK+ - accessibility implementations
* Copyright 2001 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -17,7 +17,11 @@
#include "config.h"
#include "gail.h"
#include "gtkaccessibility.h"
#include "gtkaccessibilityutil.h"
#include "gtkaccessibilitymisc.h"
#include "gtkwindowaccessible.h"
#include <stdio.h>
#include <stdlib.h>
@@ -32,8 +36,6 @@
#include <gtk/gtktogglebutton.h>
#include <gtk/gtkcombobox.h>
#include <gtk/gtkaccessible.h>
#include "gailutil.h"
#include "gailmisc.h"
#ifdef GDK_WINDOWING_X11
#include <atk-bridge.h>
@@ -66,7 +68,7 @@ static void gail_focus_tracker_init (void);
static void gail_focus_object_destroyed (gpointer data);
static void gail_focus_tracker (AtkObject *object);
static void gail_set_focus_widget (GtkWidget *focus_widget,
GtkWidget *widget);
GtkWidget *widget);
static void gail_set_focus_object (AtkObject *focus_obj,
AtkObject *obj);
@@ -75,14 +77,14 @@ static GtkWidget* next_focus_widget = NULL;
static gboolean was_deselect = FALSE;
static GtkWidget* subsequent_focus_widget = NULL;
static GtkWidget* focus_before_menu = NULL;
static guint focus_notify_handler = 0;
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,
gboolean *transient)
get_accessible_for_widget (GtkWidget *widget,
gboolean *transient)
{
AtkObject *obj = NULL;
@@ -516,13 +518,13 @@ gail_focus_notify (GtkWidget *widget)
else
{
if (_focus_widget)
atk_obj = gail_get_accessible_for_widget (_focus_widget, &transient);
atk_obj = get_accessible_for_widget (_focus_widget, &transient);
else
atk_obj = NULL;
/*
* Do not report focus on redundant object
*/
if (atk_obj &&
if (atk_obj &&
(atk_object_get_role(atk_obj) != ATK_ROLE_REDUNDANT_OBJECT))
atk_focus_tracker_notify (atk_obj);
if (atk_obj && transient)
@@ -797,6 +799,186 @@ gail_set_focus_object (AtkObject *focus_obj,
}
}
static gboolean
state_event_watcher (GSignalInvocationHint *hint,
guint n_param_values,
const GValue *param_values,
gpointer data)
{
GObject *object;
GtkWidget *widget;
AtkObject *atk_obj;
AtkObject *parent;
GdkEventWindowState *event;
gchar *signal_name;
object = g_value_get_object (param_values + 0);
if (!GTK_IS_WINDOW (object))
return FALSE;
event = g_value_get_boxed (param_values + 1);
if (event->type == GDK_WINDOW_STATE)
return FALSE;
widget = GTK_WIDGET (object);
if (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED)
signal_name = "maximize";
else if (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)
signal_name = "minimize";
else if (event->new_window_state == 0)
signal_name = "restore";
else
return TRUE;
atk_obj = gtk_widget_get_accessible (widget);
if (GTK_IS_WINDOW_ACCESSIBLE (atk_obj))
{
parent = atk_object_get_parent (atk_obj);
if (parent == atk_get_root ())
g_signal_emit_by_name (atk_obj, signal_name);
return TRUE;
}
return FALSE;
}
static gboolean
configure_event_watcher (GSignalInvocationHint *hint,
guint n_param_values,
const GValue *param_values,
gpointer data)
{
GtkAllocation allocation;
GObject *object;
GtkWidget *widget;
AtkObject *atk_obj;
AtkObject *parent;
GdkEvent *event;
gchar *signal_name;
object = g_value_get_object (param_values + 0);
if (!GTK_IS_WINDOW (object))
return FALSE;
event = g_value_get_boxed (param_values + 1);
if (event->type != GDK_CONFIGURE)
return FALSE;
widget = GTK_WIDGET (object);
gtk_widget_get_allocation (widget, &allocation);
if (allocation.x == ((GdkEventConfigure *)event)->x &&
allocation.y == ((GdkEventConfigure *)event)->y &&
allocation.width == ((GdkEventConfigure *)event)->width &&
allocation.height == ((GdkEventConfigure *)event)->height)
return TRUE;
if (allocation.width != ((GdkEventConfigure *)event)->width ||
allocation.height != ((GdkEventConfigure *)event)->height)
signal_name = "resize";
else
signal_name = "move";
atk_obj = gtk_widget_get_accessible (widget);
if (GTK_IS_WINDOW_ACCESSIBLE (atk_obj))
{
parent = atk_object_get_parent (atk_obj);
if (parent == atk_get_root ())
g_signal_emit_by_name (atk_obj, signal_name);
return TRUE;
}
return FALSE;
}
static gboolean
window_focus (GtkWidget *widget,
GdkEventFocus *event)
{
AtkObject *atk_obj;
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
atk_obj = gtk_widget_get_accessible (widget);
g_signal_emit_by_name (atk_obj, event->in ? "activate" : "deactivate");
return FALSE;
}
static void
window_added (AtkObject *atk_obj,
guint index,
AtkObject *child)
{
GtkWidget *widget;
if (!GTK_IS_WINDOW_ACCESSIBLE (child))
return;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (child));
if (!widget)
return;
g_signal_connect (widget, "focus-in-event", (GCallback) window_focus, NULL);
g_signal_connect (widget, "focus-out-event", (GCallback) window_focus, NULL);
g_signal_emit_by_name (child, "create");
}
static void
window_removed (AtkObject *atk_obj,
guint index,
AtkObject *child)
{
GtkWidget *widget;
GtkWindow *window;
if (!GTK_IS_WINDOW_ACCESSIBLE (child))
return;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (child));
if (!widget)
return;
window = GTK_WINDOW (widget);
/*
* Deactivate window if it is still focused and we are removing it. This
* can happen when a dialog displayed by gok is removed.
*/
if (gtk_window_is_active (window) && gtk_window_has_toplevel_focus (window))
g_signal_emit_by_name (child, "deactivate");
g_signal_handlers_disconnect_by_func (widget, (gpointer) window_focus, NULL);
g_signal_emit_by_name (child, "destroy");
}
static void
do_window_event_initialization (void)
{
AtkObject *root;
g_type_class_ref (GTK_TYPE_WINDOW_ACCESSIBLE);
g_signal_add_emission_hook (g_signal_lookup ("window-state-event", GTK_TYPE_WIDGET),
0, state_event_watcher, NULL, (GDestroyNotify) NULL);
g_signal_add_emission_hook (g_signal_lookup ("configure-event", GTK_TYPE_WIDGET),
0, configure_event_watcher, NULL, (GDestroyNotify) NULL);
root = atk_get_root ();
g_signal_connect (root, "children-changed::add", (GCallback) window_added, NULL);
g_signal_connect (root, "children-changed::remove", (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);
}
void
_gtk_accessibility_shutdown (void)
{
@@ -810,13 +992,13 @@ _gtk_accessibility_shutdown (void)
#ifdef GDK_WINDOWING_X11
atk_bridge_adaptor_cleanup ();
#endif
_gail_util_uninstall ();
undo_window_event_initialization ();
}
void
_gtk_accessibility_init (void)
{
if (initialized)
return;
@@ -826,10 +1008,12 @@ _gtk_accessibility_init (void)
atk_focus_tracker_init (gail_focus_tracker_init);
focus_tracker_id = atk_add_focus_tracker (gail_focus_tracker);
_gail_util_install ();
_gtk_accessibility_override_atk_util ();
do_window_event_initialization ();
#ifdef GDK_WINDOWING_X11
atk_bridge_adaptor_init (NULL, NULL);
#endif
atk_misc_instance = g_object_new (GAIL_TYPE_MISC, NULL);
atk_misc_instance = g_object_new (GTK_TYPE_MISC_IMPL, NULL);
}
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
/* GTK+ - accessibility implementations
* Copyright 2001 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -15,16 +15,20 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GTK_GAIL_H__
#define __GTK_GAIL_H__
#ifndef __GTK_ACCESSIBILITY_H__
#define __GTK_ACCESSIBILITY_H__
#include <glib.h>
#include "gtk/gtkwidget.h"
G_BEGIN_DECLS
void _gtk_accessibility_shutdown (void);
void _gtk_accessibility_init (void);
void _gtk_accessibility_shutdown (void);
void _gtk_accessibility_init (void);
gboolean _gtk_accessibility_key_snooper (GtkWidget *widget,
GdkEventKey *event);
G_END_DECLS
#endif /* __GTK_GAIL_H__ */
#endif /* __GTK_ACCESSIBILITY_H__ */
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
/* GTK+ - accessibility implementations
* Copyright 2001, 2002, 2003 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -18,33 +18,33 @@
#include "config.h"
#include <gtk/gtk.h>
#include "gailmisc.h"
#include "gtkaccessibilitymisc.h"
G_DEFINE_TYPE (GailMisc, _gail_misc, ATK_TYPE_MISC)
G_DEFINE_TYPE (GtkMiscImpl, _gtk_misc_impl, ATK_TYPE_MISC)
static void
gail_misc_threads_enter (AtkMisc *misc)
gtk_misc_impl_threads_enter (AtkMisc *misc)
{
gdk_threads_enter ();
}
static void
gail_misc_threads_leave (AtkMisc *misc)
gtk_misc_impl_threads_leave (AtkMisc *misc)
{
gdk_threads_leave ();
}
static void
_gail_misc_class_init (GailMiscClass *klass)
_gtk_misc_impl_class_init (GtkMiscImplClass *klass)
{
AtkMiscClass *misc_class = ATK_MISC_CLASS (klass);
misc_class->threads_enter = gail_misc_threads_enter;
misc_class->threads_leave = gail_misc_threads_leave;
misc_class->threads_enter = gtk_misc_impl_threads_enter;
misc_class->threads_leave = gtk_misc_impl_threads_leave;
}
static void
_gail_misc_init (GailMisc *misc)
_gtk_misc_impl_init (GtkMiscImpl *misc)
{
}
+44
View File
@@ -0,0 +1,44 @@
/* GTK+ - accessibility implementations
* Copyright 2001 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_ACCESSIBILITY_MISC_H__
#define __GTK_ACCESSIBILITY_MISC_H__
#include <atk/atk.h>
G_BEGIN_DECLS
#define GTK_TYPE_MISC_IMPL (_gtk_misc_impl_get_type ())
typedef struct _GtkMiscImpl GtkMiscImpl;
typedef struct _GtkMiscImplClass GtkMiscImplClass;
struct _GtkMiscImpl
{
AtkMisc parent;
};
struct _GtkMiscImplClass
{
AtkMiscClass parent_class;
};
GType _gtk_misc_impl_get_type (void);
G_END_DECLS
#endif /* __GTK_ACCESSIBILITY_MISC_H__ */
+156
View File
@@ -0,0 +1,156 @@
/* GTK+ - accessibility implementations
* Copyright 2011, F123 Consulting & Mais Diferenças
* Copyright 2001, 2002, 2003 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
* 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <stdlib.h>
#include <gtk/gtk.h>
#include "gtkaccessibility.h"
#include "gtkaccessibilityutil.h"
#include "gtktoplevelaccessible.h"
static GSList *key_listener_list = NULL;
typedef struct {
AtkKeySnoopFunc func;
gpointer data;
guint key;
} KeyEventListener;
static guint
add_key_event_listener (AtkKeySnoopFunc listener_func,
gpointer listener_data)
{
static guint key = 0;
KeyEventListener *listener;
key++;
listener = g_slice_new0 (KeyEventListener);
listener->func = listener_func;
listener->data = listener_data;
listener->key = key;
key_listener_list = g_slist_append (key_listener_list, listener);
return key;
}
static void
remove_key_event_listener (guint listener_key)
{
GSList *l;
for (l = key_listener_list; l; l = l->next)
{
KeyEventListener *listener = l->data;
if (listener->key == listener_key)
{
g_slice_free (KeyEventListener, listener);
key_listener_list = g_slist_delete_link (key_listener_list, l);
break;
}
}
}
static AtkObject *
get_root (void)
{
static AtkObject *root = NULL;
if (!root)
{
root = g_object_new (GTK_TYPE_TOPLEVEL_ACCESSIBLE, NULL);
atk_object_initialize (root, NULL);
}
return root;
}
static const gchar *
get_toolkit_name (void)
{
return "gtk";
}
static const gchar *
get_toolkit_version (void)
{
return GTK_VERSION;
}
void
_gtk_accessibility_override_atk_util (void)
{
AtkUtilClass *atk_class = ATK_UTIL_CLASS (g_type_class_ref (ATK_TYPE_UTIL));
atk_class->add_key_event_listener = add_key_event_listener;
atk_class->remove_key_event_listener = remove_key_event_listener;
atk_class->get_root = get_root;
atk_class->get_toolkit_name = get_toolkit_name;
atk_class->get_toolkit_version = get_toolkit_version;
}
static void
atk_key_event_from_gdk_event_key (GdkEventKey *key,
AtkKeyEventStruct *event)
{
if (key->type == GDK_KEY_PRESS)
event->type = ATK_KEY_EVENT_PRESS;
else if (key->type == GDK_KEY_RELEASE)
event->type = ATK_KEY_EVENT_RELEASE;
else
g_assert_not_reached ();
event->state = key->state;
event->keyval = key->keyval;
event->length = key->length;
if (key->string && key->string[0] &&
(key->state & GDK_CONTROL_MASK ||
g_unichar_isgraph (g_utf8_get_char (key->string))))
event->string = key->string;
else
event->string = gdk_keyval_name (key->keyval);
event->keycode = key->hardware_keycode;
event->timestamp = key->time;
}
gboolean
_gtk_accessibility_key_snooper (GtkWidget *widget,
GdkEventKey *event)
{
GSList *l;
AtkKeyEventStruct atk_event;
gboolean result;
result = FALSE;
atk_key_event_from_gdk_event_key (event, &atk_event);
for (l = key_listener_list; l; l = l->next)
{
KeyEventListener *listener = l->data;
result |= listener->func (&atk_event, listener->data);
}
return result;
}
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
/* GTK+ - accessibility implementations
* Copyright 2001 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -15,19 +15,15 @@
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GAIL_UTIL_H__
#define __GAIL_UTIL_H__
#ifndef __GTK_ACCESSIBILITY_UTIL_H__
#define __GTK_ACCESSIBILITY_UTIL_H__
#include <atk/atk.h>
G_BEGIN_DECLS
void _gail_util_install (void);
void _gail_util_uninstall (void);
gboolean _gail_util_key_snooper (GtkWidget *the_widget,
GdkEventKey *event);
void _gtk_accessibility_override_atk_util (void);
G_END_DECLS
#endif /* __GAIL_UTIL_H__ */
#endif /* __GTK_ACCESSIBILITY_UTIL_H__ */
+6 -6
View File
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
/* GTK+ - accessibility implementations
* Copyright 2001 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -27,14 +27,14 @@ struct _GtkArrowAccessiblePrivate
static void atk_image_interface_init (AtkImageIface *iface);
G_DEFINE_TYPE_WITH_CODE (GtkArrowAccessible, _gtk_arrow_accessible, GTK_TYPE_WIDGET_ACCESSIBLE,
G_DEFINE_TYPE_WITH_CODE (GtkArrowAccessible, gtk_arrow_accessible, GTK_TYPE_WIDGET_ACCESSIBLE,
G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, atk_image_interface_init))
static void
gtk_arrow_accessible_initialize (AtkObject *accessible,
gpointer data)
{
ATK_OBJECT_CLASS (_gtk_arrow_accessible_parent_class)->initialize (accessible, data);
ATK_OBJECT_CLASS (gtk_arrow_accessible_parent_class)->initialize (accessible, data);
accessible->role = ATK_ROLE_ICON;
}
@@ -46,11 +46,11 @@ gtk_arrow_accessible_finalize (GObject *object)
g_free (arrow->priv->image_description);
G_OBJECT_CLASS (_gtk_arrow_accessible_parent_class)->finalize (object);
G_OBJECT_CLASS (gtk_arrow_accessible_parent_class)->finalize (object);
}
static void
_gtk_arrow_accessible_class_init (GtkArrowAccessibleClass *klass)
gtk_arrow_accessible_class_init (GtkArrowAccessibleClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS (klass);
@@ -63,7 +63,7 @@ _gtk_arrow_accessible_class_init (GtkArrowAccessibleClass *klass)
}
static void
_gtk_arrow_accessible_init (GtkArrowAccessible *arrow)
gtk_arrow_accessible_init (GtkArrowAccessible *arrow)
{
arrow->priv = G_TYPE_INSTANCE_GET_PRIVATE (arrow,
GTK_TYPE_ARROW_ACCESSIBLE,
+8 -4
View File
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
/* GTK+ - accessibility implementations
* Copyright 2001 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -18,11 +18,15 @@
#ifndef __GTK_ARROW_ACCESSIBLE_H__
#define __GTK_ARROW_ACCESSIBLE_H__
#include "gtkwidgetaccessible.h"
#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk-a11y.h> can be included directly."
#endif
#include <gtk/a11y/gtkwidgetaccessible.h>
G_BEGIN_DECLS
#define GTK_TYPE_ARROW_ACCESSIBLE (_gtk_arrow_accessible_get_type ())
#define GTK_TYPE_ARROW_ACCESSIBLE (gtk_arrow_accessible_get_type ())
#define GTK_ARROW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ARROW_ACCESSIBLE, GtkArrowAccessible))
#define GTK_ARROW_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_ARROW_ACCESSIBLE, GtkArrowAccessibleClass))
#define GTK_IS_ARROW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ARROW_ACCESSIBLE))
@@ -45,7 +49,7 @@ struct _GtkArrowAccessibleClass
GtkWidgetAccessibleClass parent_class;
};
GType _gtk_arrow_accessible_get_type (void);
GType gtk_arrow_accessible_get_type (void);
G_END_DECLS
+5 -5
View File
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Enabling Library
/* GTK+ - accessibility implementations
* Copyright 2001 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -76,7 +76,7 @@ gtk_boolean_cell_accessible_action_interface_init (AtkActionIface *iface)
}
G_DEFINE_TYPE_EXTENDED (GtkBooleanCellAccessible, _gtk_boolean_cell_accessible, GTK_TYPE_RENDERER_CELL_ACCESSIBLE, 0,
G_DEFINE_TYPE_EXTENDED (GtkBooleanCellAccessible, gtk_boolean_cell_accessible, GTK_TYPE_RENDERER_CELL_ACCESSIBLE, 0,
G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, gtk_boolean_cell_accessible_action_interface_init))
@@ -86,7 +86,7 @@ gtk_boolean_cell_accessible_ref_state_set (AtkObject *accessible)
GtkBooleanCellAccessible *cell = GTK_BOOLEAN_CELL_ACCESSIBLE (accessible);
AtkStateSet *state_set;
state_set = ATK_OBJECT_CLASS (_gtk_boolean_cell_accessible_parent_class)->ref_state_set (accessible);
state_set = ATK_OBJECT_CLASS (gtk_boolean_cell_accessible_parent_class)->ref_state_set (accessible);
if (cell->priv->cell_value)
atk_state_set_add_state (state_set, ATK_STATE_CHECKED);
@@ -130,7 +130,7 @@ gtk_boolean_cell_accessible_update_cache (GtkCellAccessible *cell)
}
static void
_gtk_boolean_cell_accessible_class_init (GtkBooleanCellAccessibleClass *klass)
gtk_boolean_cell_accessible_class_init (GtkBooleanCellAccessibleClass *klass)
{
GtkCellAccessibleClass *cell_class = GTK_CELL_ACCESSIBLE_CLASS (klass);
AtkObjectClass *atkobject_class = ATK_OBJECT_CLASS (klass);
@@ -143,7 +143,7 @@ _gtk_boolean_cell_accessible_class_init (GtkBooleanCellAccessibleClass *klass)
}
static void
_gtk_boolean_cell_accessible_init (GtkBooleanCellAccessible *cell)
gtk_boolean_cell_accessible_init (GtkBooleanCellAccessible *cell)
{
cell->priv = G_TYPE_INSTANCE_GET_PRIVATE (cell,
GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE,
+8 -4
View File
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Enabling Library
/* GTK+ - accessibility implementations
* Copyright 2001 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -18,12 +18,16 @@
#ifndef __GTK_BOOLEAN_CELL_ACCESSIBLE_H__
#define __GTK_BOOLEAN_CELL_ACCESSIBLE_H__
#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk-a11y.h> can be included directly."
#endif
#include <atk/atk.h>
#include "gtkrenderercellaccessible.h"
#include <gtk/a11y/gtkrenderercellaccessible.h>
G_BEGIN_DECLS
#define GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE (_gtk_boolean_cell_accessible_get_type ())
#define GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE (gtk_boolean_cell_accessible_get_type ())
#define GTK_BOOLEAN_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE, GtkBooleanCellAccessible))
#define GTK_BOOLEAN_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAIL_BOOLEAN_CELL, GtkBooleanCellAccessibleClass))
#define GTK_IS_BOOLEAN_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE))
@@ -46,7 +50,7 @@ struct _GtkBooleanCellAccessibleClass
GtkRendererCellAccessibleClass parent_class;
};
GType _gtk_boolean_cell_accessible_get_type (void);
GType gtk_boolean_cell_accessible_get_type (void);
G_END_DECLS
+8 -8
View File
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
/* GTK+ - accessibility implementations
* Copyright 2001, 2002, 2003 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
static void atk_action_interface_init (AtkActionIface *iface);
static void atk_image_interface_init (AtkImageIface *iface);
G_DEFINE_TYPE_WITH_CODE (GtkButtonAccessible, _gtk_button_accessible, GTK_TYPE_CONTAINER_ACCESSIBLE,
G_DEFINE_TYPE_WITH_CODE (GtkButtonAccessible, gtk_button_accessible, GTK_TYPE_CONTAINER_ACCESSIBLE,
G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)
G_IMPLEMENT_INTERFACE (ATK_TYPE_IMAGE, atk_image_interface_init))
@@ -55,7 +55,7 @@ gtk_button_accessible_initialize (AtkObject *obj,
{
GtkWidget *parent;
ATK_OBJECT_CLASS (_gtk_button_accessible_parent_class)->initialize (obj, data);
ATK_OBJECT_CLASS (gtk_button_accessible_parent_class)->initialize (obj, data);
g_signal_connect (data, "state-flags-changed", G_CALLBACK (state_changed_cb), NULL);
@@ -143,7 +143,7 @@ gtk_button_accessible_get_name (AtkObject *obj)
if (widget == NULL)
return NULL;
name = ATK_OBJECT_CLASS (_gtk_button_accessible_parent_class)->get_name (obj);
name = ATK_OBJECT_CLASS (gtk_button_accessible_parent_class)->get_name (obj);
if (name != NULL)
return name;
@@ -190,7 +190,7 @@ gtk_button_accessible_ref_state_set (AtkObject *obj)
if (widget == NULL)
return NULL;
state_set = ATK_OBJECT_CLASS (_gtk_button_accessible_parent_class)->ref_state_set (obj);
state_set = ATK_OBJECT_CLASS (gtk_button_accessible_parent_class)->ref_state_set (obj);
if ((gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_ACTIVE) != 0)
atk_state_set_add_state (state_set, ATK_STATE_ARMED);
@@ -216,11 +216,11 @@ gtk_button_accessible_notify_gtk (GObject *obj,
g_signal_emit_by_name (atk_obj, "visible-data-changed");
}
else
GTK_WIDGET_ACCESSIBLE_CLASS (_gtk_button_accessible_parent_class)->notify_gtk (obj, pspec);
GTK_WIDGET_ACCESSIBLE_CLASS (gtk_button_accessible_parent_class)->notify_gtk (obj, pspec);
}
static void
_gtk_button_accessible_class_init (GtkButtonAccessibleClass *klass)
gtk_button_accessible_class_init (GtkButtonAccessibleClass *klass)
{
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
GtkContainerAccessibleClass *container_class = (GtkContainerAccessibleClass*)klass;
@@ -239,7 +239,7 @@ _gtk_button_accessible_class_init (GtkButtonAccessibleClass *klass)
}
static void
_gtk_button_accessible_init (GtkButtonAccessible *button)
gtk_button_accessible_init (GtkButtonAccessible *button)
{
}
+8 -4
View File
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
/* GTK+ - accessibility implementations
* Copyright 2001 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -18,11 +18,15 @@
#ifndef __GTK_BUTTON_ACCESSIBLE_H__
#define __GTK_BUTTON_ACCESSIBLE_H__
#include "gtkcontaineraccessible.h"
#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk-a11y.h> can be included directly."
#endif
#include <gtk/a11y/gtkcontaineraccessible.h>
G_BEGIN_DECLS
#define GTK_TYPE_BUTTON_ACCESSIBLE (_gtk_button_accessible_get_type ())
#define GTK_TYPE_BUTTON_ACCESSIBLE (gtk_button_accessible_get_type ())
#define GTK_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_BUTTON_ACCESSIBLE, GtkButtonAccessible))
#define GTK_BUTTON_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_BUTTON_ACCESSIBLE, GtkButtonAccessibleClass))
#define GTK_IS_BUTTON_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_BUTTON_ACCESSIBLE))
@@ -45,7 +49,7 @@ struct _GtkButtonAccessibleClass
GtkContainerAccessibleClass parent_class;
};
GType _gtk_button_accessible_get_type (void);
GType gtk_button_accessible_get_type (void);
G_END_DECLS
+27 -35
View File
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
/* GTK+ - accessibility implementations
* Copyright 2001 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
#include <gtk/gtk.h>
#include "gtkcontainercellaccessible.h"
#include "gtkcellaccessible.h"
#include "gtkcellaccessibleprivate.h"
#include "gtkcellaccessibleparent.h"
static const struct {
@@ -37,10 +37,11 @@ static const struct {
{ ATK_STATE_EXPANDED, GTK_CELL_RENDERER_EXPANDED, FALSE },
};
static GtkCellRendererState gtk_cell_accessible_get_state (GtkCellAccessible *cell);
static void atk_action_interface_init (AtkActionIface *iface);
static void atk_component_interface_init (AtkComponentIface *iface);
G_DEFINE_TYPE_WITH_CODE (GtkCellAccessible, _gtk_cell_accessible, GTK_TYPE_ACCESSIBLE,
G_DEFINE_TYPE_WITH_CODE (GtkCellAccessible, gtk_cell_accessible, GTK_TYPE_ACCESSIBLE,
G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init)
G_IMPLEMENT_INTERFACE (ATK_TYPE_COMPONENT, atk_component_interface_init))
@@ -70,7 +71,7 @@ gtk_cell_accessible_object_finalize (GObject *obj)
}
g_object_unref (relation_set);
}
G_OBJECT_CLASS (_gtk_cell_accessible_parent_class)->finalize (obj);
G_OBJECT_CLASS (gtk_cell_accessible_parent_class)->finalize (obj);
}
static gint
@@ -83,13 +84,13 @@ 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_get_children (GTK_CONTAINER_CELL_ACCESSIBLE (parent)), obj);
parent = gtk_widget_get_accessible (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell)));
if (parent == NULL)
return -1;
return _gtk_cell_accessible_parent_get_child_index (GTK_CELL_ACCESSIBLE_PARENT (parent), cell);
return gtk_cell_accessible_parent_get_child_index (GTK_CELL_ACCESSIBLE_PARENT (parent), cell);
}
static AtkStateSet *
@@ -110,7 +111,7 @@ gtk_cell_accessible_ref_state_set (AtkObject *accessible)
return state_set;
}
flags = _gtk_cell_accessible_get_state (cell_accessible);
flags = gtk_cell_accessible_get_state (cell_accessible);
atk_state_set_add_state (state_set, ATK_STATE_FOCUSABLE);
atk_state_set_add_state (state_set, ATK_STATE_SELECTABLE);
@@ -139,7 +140,7 @@ gtk_cell_accessible_ref_state_set (AtkObject *accessible)
static void
_gtk_cell_accessible_class_init (GtkCellAccessibleClass *klass)
gtk_cell_accessible_class_init (GtkCellAccessibleClass *klass)
{
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
@@ -151,12 +152,12 @@ _gtk_cell_accessible_class_init (GtkCellAccessibleClass *klass)
}
static void
_gtk_cell_accessible_init (GtkCellAccessible *cell)
gtk_cell_accessible_init (GtkCellAccessible *cell)
{
}
void
_gtk_cell_accessible_initialise (GtkCellAccessible *cell,
_gtk_cell_accessible_initialize (GtkCellAccessible *cell,
GtkWidget *widget,
AtkObject *parent)
{
@@ -286,13 +287,13 @@ gtk_cell_accessible_action_do_action (AtkAction *action,
switch (index)
{
case 0:
_gtk_cell_accessible_parent_expand_collapse (parent, cell);
gtk_cell_accessible_parent_expand_collapse (parent, cell);
break;
case 1:
_gtk_cell_accessible_parent_edit (parent, cell);
gtk_cell_accessible_parent_edit (parent, cell);
break;
case 2:
_gtk_cell_accessible_parent_activate (parent, cell);
gtk_cell_accessible_parent_activate (parent, cell);
break;
default:
return FALSE;
@@ -325,7 +326,7 @@ gtk_cell_accessible_get_extents (AtkComponent *component,
cell = GTK_CELL_ACCESSIBLE (component);
parent = gtk_widget_get_accessible (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell)));
_gtk_cell_accessible_parent_get_cell_extents (GTK_CELL_ACCESSIBLE_PARENT (parent),
gtk_cell_accessible_parent_get_cell_extents (GTK_CELL_ACCESSIBLE_PARENT (parent),
cell,
x, y, width, height, coord_type);
}
@@ -339,7 +340,7 @@ gtk_cell_accessible_grab_focus (AtkComponent *component)
cell = GTK_CELL_ACCESSIBLE (component);
parent = gtk_widget_get_accessible (gtk_accessible_get_widget (GTK_ACCESSIBLE (cell)));
return _gtk_cell_accessible_parent_grab_focus (GTK_CELL_ACCESSIBLE_PARENT (parent), cell);
return gtk_cell_accessible_parent_grab_focus (GTK_CELL_ACCESSIBLE_PARENT (parent), cell);
}
static void
@@ -349,16 +350,8 @@ atk_component_interface_init (AtkComponentIface *iface)
iface->grab_focus = gtk_cell_accessible_grab_focus;
}
/**
* _gtk_cell_accessible_get_state:
* @cell: a #GtkCellAccessible
*
* Gets the state that would be used to render the area referenced by @cell.
*
* Returns: the #GtkCellRendererState for cell
**/
GtkCellRendererState
_gtk_cell_accessible_get_state (GtkCellAccessible *cell)
static GtkCellRendererState
gtk_cell_accessible_get_state (GtkCellAccessible *cell)
{
AtkObject *parent;
@@ -368,11 +361,11 @@ _gtk_cell_accessible_get_state (GtkCellAccessible *cell)
if (parent == NULL)
return 0;
return _gtk_cell_accessible_parent_get_renderer_state (GTK_CELL_ACCESSIBLE_PARENT (parent), cell);
return gtk_cell_accessible_parent_get_renderer_state (GTK_CELL_ACCESSIBLE_PARENT (parent), cell);
}
/**
* _gtk_cell_accessible_state_changed:
/*
* gtk_cell_accessible_state_changed:
* @cell: a #GtkCellAccessible
* @added: the flags that were added from @cell
* @removed: the flags that were removed from @cell
@@ -397,18 +390,18 @@ _gtk_cell_accessible_state_changed (GtkCellAccessible *cell,
for (i = 0; i < G_N_ELEMENTS (state_map); i++)
{
if (added & state_map[i].renderer_state)
atk_object_notify_state_change (object,
atk_object_notify_state_change (object,
state_map[i].atk_state,
!state_map[i].invert);
if (added & state_map[i].renderer_state)
atk_object_notify_state_change (object,
atk_object_notify_state_change (object,
state_map[i].atk_state,
state_map[i].invert);
}
}
/**
* _gtk_cell_accessible_update_cache:
/*
* gtk_cell_accessible_update_cache:
* @cell: the cell that is changed
*
* Notifies the cell that the values in the data in the row that
@@ -416,7 +409,7 @@ _gtk_cell_accessible_state_changed (GtkCellAccessible *cell,
* cell_changed function of @cell is called to send update
* notifications for the properties it takes from its cell
* renderer.
*
*
* Note that there is no higher granularity available about which
* properties changed, so you will need to make do with this
* function.
@@ -425,7 +418,7 @@ void
_gtk_cell_accessible_update_cache (GtkCellAccessible *cell)
{
GtkCellAccessibleClass *klass;
g_return_if_fail (GTK_CELL_ACCESSIBLE (cell));
klass = GTK_CELL_ACCESSIBLE_GET_CLASS (cell);
@@ -433,4 +426,3 @@ _gtk_cell_accessible_update_cache (GtkCellAccessible *cell)
if (klass->update_cache)
klass->update_cache (cell);
}
+8 -21
View File
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
/* GTK+ - accessibility implementations
* Copyright 2001 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -18,12 +18,16 @@
#ifndef __GTK_CELL_ACCESSIBLE_H__
#define __GTK_CELL_ACCESSIBLE_H__
#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk-a11y.h> can be included directly."
#endif
#include <atk/atk.h>
#include "gtk/gtkaccessible.h"
#include <gtk/gtk.h>
G_BEGIN_DECLS
#define GTK_TYPE_CELL_ACCESSIBLE (_gtk_cell_accessible_get_type ())
#define GTK_TYPE_CELL_ACCESSIBLE (gtk_cell_accessible_get_type ())
#define GTK_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CELL_ACCESSIBLE, GtkCellAccessible))
#define GTK_CELL_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CELL_ACCESSIBLE, GtkCellAccessibleClass))
#define GTK_IS_CELL_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CELL_ACCESSIBLE))
@@ -47,24 +51,7 @@ struct _GtkCellAccessibleClass
void (*update_cache) (GtkCellAccessible *cell);
};
GType _gtk_cell_accessible_get_type (void);
GtkCellRendererState
_gtk_cell_accessible_get_state (GtkCellAccessible *cell);
void _gtk_cell_accessible_state_changed (GtkCellAccessible *cell,
GtkCellRendererState added,
GtkCellRendererState removed);
void _gtk_cell_accessible_update_cache (GtkCellAccessible *cell);
void _gtk_cell_accessible_initialise (GtkCellAccessible *cell,
GtkWidget *widget,
AtkObject *parent);
gboolean _gtk_cell_accessible_add_state (GtkCellAccessible *cell,
AtkStateType state_type,
gboolean emit_signal);
gboolean _gtk_cell_accessible_remove_state (GtkCellAccessible *cell,
AtkStateType state_type,
gboolean emit_signal);
GType gtk_cell_accessible_get_type (void);
G_END_DECLS
+24 -25
View File
@@ -1,5 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
/* GTK+ - accessibility implementations
* Copyright 2001 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -22,7 +21,7 @@
#include "gtkcellaccessibleparent.h"
GType
_gtk_cell_accessible_parent_get_type (void)
gtk_cell_accessible_parent_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
@@ -44,13 +43,13 @@ _gtk_cell_accessible_parent_get_type (void)
}
void
_gtk_cell_accessible_parent_get_cell_extents (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell,
gint *x,
gint *y,
gint *width,
gint *height,
AtkCoordType coord_type)
gtk_cell_accessible_parent_get_cell_extents (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell,
gint *x,
gint *y,
gint *width,
gint *height,
AtkCoordType coord_type)
{
GtkCellAccessibleParentIface *iface;
@@ -63,9 +62,9 @@ _gtk_cell_accessible_parent_get_cell_extents (GtkCellAccessibleParent *parent,
}
void
_gtk_cell_accessible_parent_get_cell_area (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell,
GdkRectangle *cell_rect)
gtk_cell_accessible_parent_get_cell_area (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell,
GdkRectangle *cell_rect)
{
GtkCellAccessibleParentIface *iface;
@@ -79,8 +78,8 @@ _gtk_cell_accessible_parent_get_cell_area (GtkCellAccessibleParent *parent,
}
gboolean
_gtk_cell_accessible_parent_grab_focus (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell)
gtk_cell_accessible_parent_grab_focus (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell)
{
GtkCellAccessibleParentIface *iface;
@@ -95,8 +94,8 @@ _gtk_cell_accessible_parent_grab_focus (GtkCellAccessibleParent *parent,
}
int
_gtk_cell_accessible_parent_get_child_index (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell)
gtk_cell_accessible_parent_get_child_index (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell)
{
GtkCellAccessibleParentIface *iface;
@@ -111,8 +110,8 @@ _gtk_cell_accessible_parent_get_child_index (GtkCellAccessibleParent *parent,
}
GtkCellRendererState
_gtk_cell_accessible_parent_get_renderer_state (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell)
gtk_cell_accessible_parent_get_renderer_state (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell)
{
GtkCellAccessibleParentIface *iface;
@@ -128,8 +127,8 @@ _gtk_cell_accessible_parent_get_renderer_state (GtkCellAccessibleParent *parent,
}
void
_gtk_cell_accessible_parent_expand_collapse (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell)
gtk_cell_accessible_parent_expand_collapse (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell)
{
GtkCellAccessibleParentIface *iface;
@@ -143,8 +142,8 @@ _gtk_cell_accessible_parent_expand_collapse (GtkCellAccessibleParent *parent,
}
void
_gtk_cell_accessible_parent_activate (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell)
gtk_cell_accessible_parent_activate (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell)
{
GtkCellAccessibleParentIface *iface;
@@ -158,8 +157,8 @@ _gtk_cell_accessible_parent_activate (GtkCellAccessibleParent *parent,
}
void
_gtk_cell_accessible_parent_edit (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell)
gtk_cell_accessible_parent_edit (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell)
{
GtkCellAccessibleParentIface *iface;
+29 -26
View File
@@ -1,5 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
*
/* GTK+ - accessibility implementations
* Copyright 2001 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -19,8 +18,12 @@
#ifndef __GTK_CELL_ACCESSIBLE_PARENT_H__
#define __GTK_CELL_ACCESSIBLE_PARENT_H__
#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk-a11y.h> can be included directly."
#endif
#include <atk/atk.h>
#include "gtkcellaccessible.h"
#include <gtk/a11y/gtkcellaccessible.h>
G_BEGIN_DECLS
@@ -33,7 +36,7 @@ G_BEGIN_DECLS
* implement atk_component_get_extents().
*/
#define GTK_TYPE_CELL_ACCESSIBLE_PARENT (_gtk_cell_accessible_parent_get_type ())
#define GTK_TYPE_CELL_ACCESSIBLE_PARENT (gtk_cell_accessible_parent_get_type ())
#define GTK_IS_CELL_ACCESSIBLE_PARENT(obj) G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CELL_ACCESSIBLE_PARENT)
#define GTK_CELL_ACCESSIBLE_PARENT(obj) G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CELL_ACCESSIBLE_PARENT, GtkCellAccessibleParent)
#define GTK_CELL_ACCESSIBLE_PARENT_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GTK_TYPE_CELL_ACCESSIBLE_PARENT, GtkCellAccessibleParentIface))
@@ -70,31 +73,31 @@ struct _GtkCellAccessibleParentIface
GtkCellAccessible *cell);
};
GType _gtk_cell_accessible_parent_get_type (void);
GType gtk_cell_accessible_parent_get_type (void);
void _gtk_cell_accessible_parent_get_cell_extents (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell,
gint *x,
gint *y,
gint *width,
gint *height,
AtkCoordType coord_type);
void _gtk_cell_accessible_parent_get_cell_area (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell,
GdkRectangle *cell_rect);
gboolean _gtk_cell_accessible_parent_grab_focus (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell);
int _gtk_cell_accessible_parent_get_child_index (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell);
void gtk_cell_accessible_parent_get_cell_extents (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell,
gint *x,
gint *y,
gint *width,
gint *height,
AtkCoordType coord_type);
void gtk_cell_accessible_parent_get_cell_area (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell,
GdkRectangle *cell_rect);
gboolean gtk_cell_accessible_parent_grab_focus (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell);
int gtk_cell_accessible_parent_get_child_index (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell);
GtkCellRendererState
_gtk_cell_accessible_parent_get_renderer_state(GtkCellAccessibleParent *parent,
GtkCellAccessible *cell);
void _gtk_cell_accessible_parent_expand_collapse (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell);
void _gtk_cell_accessible_parent_activate (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell);
void _gtk_cell_accessible_parent_edit (GtkCellAccessibleParent *parent,
gtk_cell_accessible_parent_get_renderer_state(GtkCellAccessibleParent *parent,
GtkCellAccessible *cell);
void gtk_cell_accessible_parent_expand_collapse (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell);
void gtk_cell_accessible_parent_activate (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell);
void gtk_cell_accessible_parent_edit (GtkCellAccessibleParent *parent,
GtkCellAccessible *cell);
G_END_DECLS
+41
View File
@@ -0,0 +1,41 @@
/* GTK+ - accessibility implementations
* Copyright 2001 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_CELL_ACCESSIBLE_PRIVATE_H__
#define __GTK_CELL_ACCESSIBLE_PRIVATE_H__
#include <gtk/a11y/gtkcellaccessible.h>
G_BEGIN_DECLS
void _gtk_cell_accessible_state_changed (GtkCellAccessible *cell,
GtkCellRendererState added,
GtkCellRendererState removed);
void _gtk_cell_accessible_update_cache (GtkCellAccessible *cell);
void _gtk_cell_accessible_initialize (GtkCellAccessible *cell,
GtkWidget *widget,
AtkObject *parent);
gboolean _gtk_cell_accessible_add_state (GtkCellAccessible *cell,
AtkStateType state_type,
gboolean emit_signal);
gboolean _gtk_cell_accessible_remove_state (GtkCellAccessible *cell,
AtkStateType state_type,
gboolean emit_signal);
G_END_DECLS
#endif /* __GTK_CELL_ACCESSIBLE_PRIVATE_H__ */
+8 -8
View File
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
/* GTK+ - accessibility implementations
* Copyright 2002 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
#include "gtkcheckmenuitemaccessible.h"
G_DEFINE_TYPE (GtkCheckMenuItemAccessible, _gtk_check_menu_item_accessible, GTK_TYPE_MENU_ITEM_ACCESSIBLE)
G_DEFINE_TYPE (GtkCheckMenuItemAccessible, gtk_check_menu_item_accessible, GTK_TYPE_MENU_ITEM_ACCESSIBLE)
static void
toggled_cb (GtkWidget *widget)
@@ -42,7 +42,7 @@ static void
gtk_check_menu_item_accessible_initialize (AtkObject *obj,
gpointer data)
{
ATK_OBJECT_CLASS (_gtk_check_menu_item_accessible_parent_class)->initialize (obj, data);
ATK_OBJECT_CLASS (gtk_check_menu_item_accessible_parent_class)->initialize (obj, data);
g_signal_connect (data, "toggled", G_CALLBACK (toggled_cb), NULL);
@@ -60,7 +60,7 @@ gtk_check_menu_item_accessible_ref_state_set (AtkObject *accessible)
if (widget == NULL)
return NULL;
state_set = ATK_OBJECT_CLASS (_gtk_check_menu_item_accessible_parent_class)->ref_state_set (accessible);
state_set = ATK_OBJECT_CLASS (gtk_check_menu_item_accessible_parent_class)->ref_state_set (accessible);
check_menu_item = GTK_CHECK_MENU_ITEM (widget);
@@ -78,7 +78,7 @@ gtk_check_menu_item_accessible_ref_state_set (AtkObject *accessible)
static void
gtk_check_menu_item_accessible_notify_gtk (GObject *obj,
GParamSpec *pspec)
GParamSpec *pspec)
{
GtkCheckMenuItem *check_menu_item = GTK_CHECK_MENU_ITEM (obj);
AtkObject *atk_obj;
@@ -101,11 +101,11 @@ gtk_check_menu_item_accessible_notify_gtk (GObject *obj,
atk_object_notify_state_change (atk_obj, ATK_STATE_ENABLED, (sensitive && !inconsistent));
}
else
GTK_WIDGET_ACCESSIBLE_CLASS (_gtk_check_menu_item_accessible_parent_class)->notify_gtk (obj, pspec);
GTK_WIDGET_ACCESSIBLE_CLASS (gtk_check_menu_item_accessible_parent_class)->notify_gtk (obj, pspec);
}
static void
_gtk_check_menu_item_accessible_class_init (GtkCheckMenuItemAccessibleClass *klass)
gtk_check_menu_item_accessible_class_init (GtkCheckMenuItemAccessibleClass *klass)
{
AtkObjectClass *class = ATK_OBJECT_CLASS (klass);
GtkWidgetAccessibleClass *widget_class = (GtkWidgetAccessibleClass*)klass;
@@ -117,6 +117,6 @@ _gtk_check_menu_item_accessible_class_init (GtkCheckMenuItemAccessibleClass *kla
}
static void
_gtk_check_menu_item_accessible_init (GtkCheckMenuItemAccessible *item)
gtk_check_menu_item_accessible_init (GtkCheckMenuItemAccessible *item)
{
}
+8 -4
View File
@@ -1,4 +1,4 @@
/* GAIL - The GNOME Accessibility Implementation Library
/* GTK+ - accessibility implementations
* Copyright 2002 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -18,11 +18,15 @@
#ifndef __GTK_CHECK_MENU_ITEM_ACCESSIBLE_H__
#define __GTK_CHECK_MENU_ITEM_ACCESSIBLE_H__
#include "gtkmenuitemaccessible.h"
#if !defined (__GTK_A11Y_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk-a11y.h> can be included directly."
#endif
#include <gtk/a11y/gtkmenuitemaccessible.h>
G_BEGIN_DECLS
#define GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE (_gtk_check_menu_item_accessible_get_type ())
#define GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE (gtk_check_menu_item_accessible_get_type ())
#define GTK_CHECK_MENU_ITEM_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE, GtkCheckMenuItemAccessible))
#define GTK_CHECK_MENU_ITEM_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE, GtkCheckMenuItemAccessibleClass))
#define GTK_IS_CHECK_MENU_ITEM_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE))
@@ -45,7 +49,7 @@ struct _GtkCheckMenuItemAccessibleClass
GtkMenuItemAccessibleClass parent_class;
};
GType _gtk_check_menu_item_accessible_get_type (void);
GType gtk_check_menu_item_accessible_get_type (void);
G_END_DECLS

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