2012-02-08 30 views
5

Tôi hiện đang cố gắng gỡ lỗi một vấn đề mà tôi đã gặp phải với chương trình 'matchbox-keyboard' (http://matchbox-project.org/) và tôi đang hy vọng để được hỗ trợ. matchbox-keyboard là bàn phím trên màn hình mà tôi hiện đang sử dụng trong kiosk màn hình cảm ứng để cho phép người dùng nhập một số đầu vào cơ bản để thực hiện tìm kiếm, v.v. Có thể hơi cũ, nhưng dù sao nó là lý tưởng cho ứng dụng của tôi vì nó là bàn phím 'theo yêu cầu' (tức là nó chỉ xuất hiện khi cần), nhẹ và hoạt động tốt với trình quản lý cửa sổ-hộp khớp mà tôi đang sử dụng trên thiết bị. Tuy nhiên, một trong các trang web mà kiosk phải truy cập yêu cầu người dùng phải đăng nhập tạm thời và vì lý do nào đó bàn phím ảo biến mất bất cứ khi nào người dùng nhấp vào trường mật khẩu.Cách phát hiện khi nhập trường mật khẩu

Trang web mà người dùng phải truy cập không thể thay đổi, vì vậy tôi đã tự giải quyết để thử và vá bàn phím hộp khớp để thay đổi hành vi này. Cuối cùng, tôi đã bắt nguồn từ vấn đề trở lại một Atom tùy chỉnh theo quy định tại các mã như sau

typedef enum { 
    MBKeyboardRemoteNone = 0, 
    MBKeyboardRemoteShow, 
    MBKeyboardRemoteHide, 
    MBKeyboardRemoteToggle, 
} MBKeyboardRemoteOperation; 

=============

void 
mb_kbd_remote_init (MBKeyboardUI *ui) 
{ 
    Atom_MB_IM_INVOKER_COMMAND = XInternAtom(mb_kbd_ui_x_display(ui), 
         "_MB_IM_INVOKER_COMMAND", False); 
} 

Atom này sau đó được kiểm tra trong Xevents, và sau đó dữ liệu từ xevent (xevent->xclient.data.l[0]) được sử dụng để xác định trạng thái để đưa bàn phím vào. Điều tôi không thể hiểu là màn hình X biết khi nào Xevent được cho là là loại '_MB_IM_INVOKER_COMMAND' và cách nó thực sự đặt giá trị dữ liệu. Cụ thể, cách thức/tại sao nó đặt giá trị là xevent->xclient.data.l[0] thành 2 (MBKeyboardRemoteHide) khi tôi nhập trường mật khẩu.

Tôi đã thử quét mã để tham chiếu đến các đối tượng quan trọng được đề cập ở đây, cũng như đọc các sự kiện Xlib từ hướng dẫn tại đây: http://tronche.com/gui/x/xlib/events/ và tìm kiếm câu trả lời trên google, nhưng thực sự điều này chỉ hơn một chút đầu, và tôi không thể nắm bắt được vấn đề. Tại thời điểm này, nó đã vượt qua sự cần thiết cho dự án kiosk của tôi và trở nên tò mò hơn (và cái gì đó sẽ khiến tôi phát điên) cho nên nếu ai đó có thể giúp tôi nhận được một số câu trả lời, tôi sẽ đánh giá cao nhất.

Cập nhật ========== ==========

thử nghiệm Hơn nữa/thông tin:

vấn đề này không xuất hiện để được thực hiện trình duyệt cụ thể, như Tôi đã thử trang web mong muốn của mình, cũng như trang HTML thử nghiệm cơ bản chỉ có trường văn bản và mật khẩu, trên trình duyệt gecko (Firefox), cũng như trình duyệt webkit (Midori) và trong cả hai trình duyệt, trên cả hai trang, hành vi là như nhau. Dưới đây là các trang HTML thử nghiệm để tham khảo:

<head> 
</head> 
<body> 
    <form> 
    Name: <input type="text" name="firstname"><br> 
    PW: <input type="password" name="lastname"> 
    </form> 
</body> 
</html> 

Nó xuất hiện với tôi rằng trường mật khẩu, là cố ý từ chối tập trung đối với một số lý do, trong đó nhấn lĩnh vực trực tiếp gây ra các phương pháp tập trung-out gtk-im được gọi là . Nghi ngờ của tôi là nó có thể là một phần của việc thực hiện GTK, có thể liên quan đến hành động mà các lĩnh vực mật khẩu thường 'ẩn'. Có lẽ điều này được thực hiện để ngăn chặn clipboard theo yêu cầu từ lưu trữ mật khẩu hoặc một cái gì đó để có hiệu lực?

Khi kiểm tra danh sách sự kiện/đầu ra gỡ lỗi khi nhấp vào trường mật khẩu và trên trường văn bản, danh sách các sự kiện đã nhận cho từng loại trường là rất giống nhau. Nhiều sự kiện là cùng loại, nhưng có một vài sự khác biệt giữa chúng mà tôi vẫn đang cố gắng giải mã.Tôi biết những con số sự kiện chủ yếu là vô nghĩa trong bối cảnh này, nhưng mang tính minh họa, đây là danh sách sự kiện khác nhau cho lĩnh vực phi mật khẩu:

matchbox-keyboard-remote.c:47,mb_kbd_remote_process_xevents() got a message of type _MB_IM_INVOKER_COMMAND, val 1 
matchbox-keyboard-ui.c:560,mb_kbd_ui_redraw() mark 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 69206018 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 69206018 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 69206018 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 37748776 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 35651628 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 35651629 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 35682433 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 69206018 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 69206018 

và cho lĩnh vực mật khẩu:

matchbox-keyboard-remote.c:47,mb_kbd_remote_process_xevents() got a message of type _MB_IM_INVOKER_COMMAND, val 2 
matchbox-keyboard-ui.c:1230,mb_kbd_ui_event_loop() Hide timed out, calling mb_kbd_ui_hide 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 69206018 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 69206018 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 69206018 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 35651628 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 35682433 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 35665943 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 39845918 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 35651628 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 35651629 
matchbox-keyboard-remote.c:38,mb_kbd_remote_process_xevents() got a message, type 35682433 

Thật không may đây là tốt nhất thông tin của tôi được vào lúc này, kể từ khi kỹ năng C của tôi là khá gỉ.

Trả lời

4

bàn phím hộp khớp cài đặt phương thức nhập GTK (xem thư mục gtk-im). Điều này có trách nhiệm gửi tin nhắn đến bàn phím.

Hiện tại, lệnh này sẽ gửi lệnh MBKeyboardRemoteHide này khi phương thức nhập được thông báo rằng tiêu điểm bị xóa (xem gtk-im/im-context.c).

Trong điều khoản của XEvent xử lý đây chỉ là một ClientMessage cho phép khách hàng giao tiếp với nhau bằng cách sử dụng "giao thức" của riêng họ.

Điều tôi không thể giải thích là tại sao khi bạn nhấp vào trường mật khẩu bạn không nhận được tập tin vfunc focus_in được gọi. Đây có thể là một phần của quá trình triển khai trình duyệt hoặc sự cố GtkIMContext.

+0

vấn đề dường như không thực hiện trình duyệt cụ thể, vì tôi đã thử trang web mong muốn của mình, cũng như trang HTML thử nghiệm cơ bản chỉ có trường văn bản và mật khẩu, trên trình duyệt tắc kè (Firefox), cũng như trình duyệt webkit (Midori), và trong cả hai trình duyệt, trên cả hai trang, hành vi giống nhau. Chỉnh sửa câu hỏi của tôi để bao gồm thêm thông tin. – Andrew

Các vấn đề liên quan