; Module/File: Keys_GetNum&CapsLockstate.pb ; Function: Shows caps- & numlock-state - Linux ; Author: Omi ; Date: Sep. 15, 2014 ; Version: 0.1 ; Target Compiler: PureBasic 5.22/5.31/5.40 ; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni ;-------------------------------------------------------------- EnableExplicit ImportC "" g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *data, destroy= 0, flags= 0) As "g_signal_connect_data" gtk_image_new_from_stock(stock_id.p-utf8, size); to gtk3.1 gtk_image_new_from_icon_name(stock_id.p-utf8, size); gtk2.6 up gtk_widget_set_visible(*widget.GtkWidget, visible) gtk_widget_set_tooltip_text(*widget.GtkWidget, text.p-utf8) EndImport ; Object constants #MainWin = 0 #StatusBar = 0 #WinX=300 #WinY=200 #WinW=350 #WinH=100 Global.l gEvent, gQuit Global *StatusBar, *SB_Image1, *SB_Image2 ; ; WARNING: 2 different Events on each keypress on a ubuntu 64-Bit, state is not correct. Correct behaviour on a xubuntu 32-Bit, state differs ProcedureC KeyPressCallback(*widget.GtkWidget, *event.GdkEventKey, user_data) Protected.i State = *event\state Protected.a KeyAsc = *event\keyval & $FF Protected.l KeyWord= *event\keyval & $FFFF If KeyWord= $FF7F; num If State & $10 gtk_widget_set_visible(*SB_Image2, #False) Else gtk_widget_set_visible(*SB_Image2, #True) EndIf EndIf If KeyWord= $FFE5; caps If State & $2 gtk_widget_set_visible(*SB_Image1, #False) Else gtk_widget_set_visible(*SB_Image1, #True) EndIf EndIf EndProcedure If OpenWindow(#MainWin, #WinX, #WinY, #WinW, #WinH, "Show caps- & numlock-state", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) If CreateStatusBar(#StatusBar, WindowID(#MainWin)) AddStatusBarField(250) StatusBarText(#StatusBar, 0, "type in and try caps- & numlock-keys") *StatusBar= StatusBarID(#StatusBar) *SB_Image1= gtk_image_new_from_icon_name("dialog-warning-symbolic", #GTK_ICON_SIZE_MENU); Add image for capslock in Statusbar ;*SB_Image1= gtk_image_new_from_stock("gtk-caps-lock-warning", #GTK_ICON_SIZE_MENU); gtk2 Add image for capslock in Statusbar gtk_box_pack_start_(*StatusBar, *SB_Image1, #False, #False, 0) gtk_widget_show_(*SB_Image1) *SB_Image2= gtk_image_new_from_icon_name("media-playback-stop", #GTK_ICON_SIZE_MENU); Add image for numlock in Statusbar ;*SB_Image1= gtk_image_new_from_stock("gtk-media-stop", #GTK_ICON_SIZE_MENU); gtk2 Add image for capslock in Statusbar gtk_box_pack_start_(*StatusBar, *SB_Image2, #False, #False, 0) gtk_widget_show_(*SB_Image2) gtk_widget_set_visible(*SB_Image1, #False); caps set std.- invisible gtk_widget_set_visible(*SB_Image2, #True) ; num set std. - visible gtk_widget_set_tooltip_text(*SB_Image1, "Shows CapsLock ON") gtk_widget_set_tooltip_text(*SB_Image2, "Shows NumLock ON") EndIf g_signal_connect(WindowID(#MainWin), "key_press_event", @KeyPressCallback(), #Null) Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True Case #PB_Event_Timer EndSelect Until gQuit EndIf ; IDE Options = PureBasic 5.44 LTS (Linux - x86) ; CursorPosition = 12 ; Folding = - ; EnableUnicode ; EnableXP