pure-x11 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b0aef4dac032e7cc033a474d8b3f19920c2dd18e55a98cdf08329c0dcb9f360e
4
- data.tar.gz: 346955046f31e2e53a61183ddcd9d19db11dab82c9de8b9ea04c92b9f4900e93
3
+ metadata.gz: a54ae04997fddd16eaeea021a1b8141649b94c01fc4da4172395432fb119b768
4
+ data.tar.gz: 67a426e9ecd3befd4e4d33c74a63a2504b1aff720c6a871cdf69c9900637b7eb
5
5
  SHA512:
6
- metadata.gz: 417b477de5a70c6e0e568e218f007544823e1986c7969bd666bf4a8c9382c2af349ac745c693f3b9fe07aeccc9119fadda5daa6b0dfad6bb388218dc6af2ba03
7
- data.tar.gz: 153aacfb1fa54955eb14d6b186a65868a803f486c88d55b483a55097b81d545fab3888ebaff3332c1fa0d964d71293a49a08654d6fef71ed7501ab6926028185
6
+ metadata.gz: 4c71571ad6cb34be6d9aa6d60871bba90efcc29931829035c93a11f7de9fa45741e4851179b03bf00ba2eff7aad26f2362c1323f35bf2f3f34eb2f787ca0a3f4
7
+ data.tar.gz: 3b727bf9aa3be18791b50178a64766626655ce8c48f743333e142fe3b2cece7c4ecbb65a78e77dd54ea7c5ebb11959493ffcd1e265d247acc34e63a423ede4c8
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pure-x11 (0.0.8)
4
+ pure-x11 (0.0.12)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../lib/X11'
3
+
4
+ display = X11::Display.new
5
+ root = display.screens.first.root
6
+
7
+ # Create a simple window
8
+ window = display.create_window(
9
+ 100, 100, 400, 300,
10
+ depth: 24,
11
+ values: { X11::Form::CWBackPixel => 0xFFFFFF }
12
+ )
13
+
14
+ # Select input events (pointer motion)
15
+ display.select_input(window, X11::Form::PointerMotionMask)
16
+
17
+ # Map the window (make it visible)
18
+ display.map_window(window)
19
+
20
+ # Wait for window to be visible
21
+ sleep(0.5)
22
+
23
+ puts "Window created. Moving your mouse over the window will display coordinates."
24
+ puts "Press Ctrl+C to exit."
25
+
26
+ # Main event loop
27
+ display.run do |event|
28
+ case event
29
+ when X11::Form::MotionNotify
30
+ # Query pointer position relative to window
31
+ pointer = display.query_pointer(window)
32
+ puts "Pointer position:"
33
+ puts " Window: (#{pointer.win_x}, #{pointer.win_y})"
34
+ puts " Root: (#{pointer.root_x}, #{pointer.root_y})"
35
+ puts " Child: #{pointer.child == 0 ? 'None' : pointer.child}"
36
+ puts " Mask: #{pointer.mask.to_s(16)}"
37
+ puts " Same screen: #{pointer.same_screen}"
38
+ puts "--------------------"
39
+ end
40
+ end
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../lib/X11'
3
+
4
+ # Create display connection
5
+ display = X11::Display.new
6
+
7
+ # Get root window of first screen
8
+ root = display.screens.first.root
9
+
10
+ puts "Move your mouse around and watch the coordinates update."
11
+ puts "Press Ctrl+C to exit."
12
+
13
+ # Loop and query pointer position every 0.1 seconds
14
+ loop do
15
+ pointer = display.query_pointer(root)
16
+
17
+ system("clear") # Clear terminal
18
+ puts "Pointer position relative to root window:"
19
+ puts " Root coordinates: (#{pointer.root_x}, #{pointer.root_y})"
20
+ puts " Window under pointer: #{pointer.child == 0 ? 'None' : pointer.child}"
21
+ puts " Button/modifier mask: #{pointer.mask.to_s(16)}"
22
+ puts " Same screen: #{pointer.same_screen}"
23
+
24
+ sleep(0.1)
25
+ end
data/lib/X11/display.rb CHANGED
@@ -659,6 +659,10 @@ module X11
659
659
  def render_free_picture(picture)
660
660
  write_request(Form::XRenderFreePicture.new(render_opcode, picture))
661
661
  end
662
+
663
+ def query_pointer(window)
664
+ write_sync(Form::QueryPointer.new(window), Form::QueryPointerReply)
665
+ end
662
666
 
663
667
  private
664
668
 
data/lib/X11/form.rb CHANGED
@@ -215,6 +215,10 @@ module X11
215
215
  ## X11 Packet Defintions
216
216
  ##
217
217
 
218
+ class Reply < BaseForm
219
+ field :reply, Uint8
220
+ end
221
+
218
222
  class ClientHandshake < BaseForm
219
223
  field :byte_order, Uint8
220
224
  unused 1
@@ -458,6 +462,27 @@ module X11
458
462
  field :request_length, Uint16, value: 2
459
463
  field :window, Window
460
464
  end
465
+
466
+ class QueryPointer < BaseForm
467
+ field :opcode, Uint8, value: 38
468
+ unused 1
469
+ field :request_length, Uint16, value: 2
470
+ field :window, Window
471
+ end
472
+
473
+ class QueryPointerReply < Reply
474
+ field :same_screen, Bool
475
+ field :sequence_number, Uint16
476
+ field :reply_length, Uint32
477
+ field :root, Window
478
+ field :child, Window
479
+ field :root_x, Int16
480
+ field :root_y, Int16
481
+ field :win_x, Int16
482
+ field :win_y, Int16
483
+ field :mask, Uint16
484
+ unused 6
485
+ end
461
486
 
462
487
  class ChangeSaveSet < BaseForm
463
488
  field :opcode, Uint8, value: 6
@@ -553,10 +578,6 @@ module X11
553
578
  field :name, String8, :string
554
579
  end
555
580
 
556
- class Reply < BaseForm
557
- field :reply, Uint8
558
- end
559
-
560
581
  class InternAtomReply < Reply
561
582
  unused 1
562
583
  field :sequence_number, Uint16
data/lib/X11/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module X11
2
- VERSION = "0.0.11"
2
+ VERSION = "0.0.12"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pure-x11
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vidar Hokstad
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2025-03-25 00:00:00.000000000 Z
12
+ date: 2025-04-05 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Pure Ruby X11 bindings
15
15
  email:
@@ -28,6 +28,8 @@ files:
28
28
  - docs/protocol.pdf
29
29
  - example/client_message.rb
30
30
  - example/genie.png
31
+ - example/query_pointer.rb
32
+ - example/query_pointer_simple.rb
31
33
  - example/test.rb
32
34
  - lib/X11.rb
33
35
  - lib/X11/auth.rb