Beispiel #1
0
bool isCapsLockOn()
{
    Display *display = XOpenDisplay( NULL );
    bool caps_state = false;
    unsigned n;
    XkbGetIndicatorState( display, XkbUseCoreKbd, &n );
    caps_state = ( n & 0x01 ) == 1;
    XCloseDisplay( display );
    return caps_state;
}
bool LxQtKbIndicator::getLockStatus(int bit)
{
    bool state = false;
    if (mDisplay)
    {
        unsigned n;
        XkbGetIndicatorState(mDisplay, XkbUseCoreKbd, &n);
        state = (n & (1 << bit));
    }
    return state;
}
bool RazorKbIndicatorEventFilter::getLockStatus(int bit)
{
    bool state = false;
    if (display)
    {
        unsigned n;
        XkbGetIndicatorState(display, XkbUseCoreKbd, &n);
        state = (n & (1 << bit));
    }
    return state;
}
Beispiel #4
0
bool Platform::capsLockEnabled()
{
    Display* d = X11Display::lock();
    bool caps_state = false;
    if (d) {
        unsigned n;
        XkbGetIndicatorState(d, XkbUseCoreKbd, &n);
        caps_state = (n & 0x01) == 1;
    }
    X11Display::unlock();
    return caps_state;
}
Beispiel #5
0
// Initialize the modifier lock masks.
static void initialize_locks() {
	#ifdef USE_XKBCOMMON

	if (xkb_state_led_name_is_active(state, XKB_LED_NAME_CAPS)) {
		set_modifier_mask(MASK_CAPS_LOCK);
	}
	else {
		unset_modifier_mask(MASK_CAPS_LOCK);
	}

	if (xkb_state_led_name_is_active(state, XKB_LED_NAME_NUM)) {
		set_modifier_mask(MASK_NUM_LOCK);
	}
	else {
		unset_modifier_mask(MASK_NUM_LOCK);
	}

	if (xkb_state_led_name_is_active(state, XKB_LED_NAME_SCROLL)) {
		set_modifier_mask(MASK_SCROLL_LOCK);
	}
	else {
		unset_modifier_mask(MASK_SCROLL_LOCK);
	}
	#else
	unsigned int led_mask = 0x00;
	if (XkbGetIndicatorState(hook->ctrl.display, XkbUseCoreKbd, &led_mask) == Success) {
		if (led_mask & 0x01) {
			set_modifier_mask(MASK_CAPS_LOCK);
		}
		else {
			unset_modifier_mask(MASK_CAPS_LOCK);
		}

		if (led_mask & 0x02) {
			set_modifier_mask(MASK_NUM_LOCK);
		}
		else {
			unset_modifier_mask(MASK_NUM_LOCK);
		}

		if (led_mask & 0x04) {
			set_modifier_mask(MASK_SCROLL_LOCK);
		}
		else {
			unset_modifier_mask(MASK_SCROLL_LOCK);
		}
	}
	else {
		logger(LOG_LEVEL_WARN, "%s [%u]: XkbGetIndicatorState failed to get current led mask!\n",
				__FUNCTION__, __LINE__);
	}
	#endif
}
Beispiel #6
0
bool Platform::capsLockEnabled()
{
    Display* d = XOpenDisplay((char*)0);
    bool caps_state = false;
    if (d) {
        unsigned n;
        XkbGetIndicatorState(d, XkbUseCoreKbd, &n);
        caps_state = (n & 0x01) == 1;
        XCloseDisplay(d);
    }
    return caps_state;
}
void UserPromptView::CheckIfCapsLockOn()
{
  Display *dpy = nux::GetGraphicsDisplay()->GetX11Display();
  unsigned int state = 0;
  XkbGetIndicatorState(dpy, XkbUseCoreKbd, &state);

  // Caps is on 0x1, couldn't find any #define in /usr/include/X11
  if ((state & 0x1) == 1)
    caps_lock_on_ = true;
  else
    caps_lock_on_ = false;
}
// TRUE - success
gboolean xkbleds_get_state() {
    d = XOpenDisplay(NULL);
    if (!d)
        return FALSE;
    if(XkbGetIndicatorState(d, XkbUseCoreKbd, &states) != Success) {
        XCloseDisplay(d);
        return FALSE;
    }
    XCloseDisplay(d);
    old_xkb_state=xkb_state;
    xkb_state=states;
    for(i = 0; i < NUM_LEDS; i++) {
        xkb_leds[i]=((states & masks[i])!=0);
    }
    return TRUE;
}
bool checkCapsLock(Display* d) {
 // platform dependent method of determining if CAPS LOCK is on
/*#ifdef Q_OS_WIN32 // MS Windows version
 return GetKeyState(VK_CAPITAL) == 1;
#else // X11 version (Linux/Unix/Mac OS X/etc...)*/
 //Display* d = XOpenDisplay((char*)0);
 bool caps_state = false;
 if (d) {
  unsigned n;
  XkbGetIndicatorState(d, XkbUseCoreKbd, &n);
	//printf("Indicator State: %u\n",n);
  caps_state = (n & 0x01) == 1;
 }
 return caps_state;
//#endif
}
Beispiel #10
0
int main(void) {
  Display *disp;
  int opcode;
  unsigned int state;
  int maj = XkbMajorVersion;
  int min = XkbMinorVersion;
  XkbEvent ev;

  /* Open Display */
  if ( !(disp = XOpenDisplay(NULL))) {
    fprintf(stderr, "Can't open display: CHECK DISPLAY VARIABLE\n");
    exit(1);
  }

  if (!XkbLibraryVersion(&maj, &min)) {
    fprintf(stderr, "Couldn't get Xkb library version\n");
    exit(1);
  }
  
  if (!XkbQueryExtension(disp, &opcode, &xkb_event_base, &xkb_error_base, &maj, &min)) {
    fprintf(stderr, "XkbQueryExtension error\n");
    exit(1);
  }

  if (!XkbSelectEvents(disp, XkbUseCoreKbd, XkbIndicatorStateNotifyMask, 
                       XkbIndicatorStateNotifyMask)) {
    fprintf(stderr, "XkbSelectEvents\n");
    exit(1);
  }

  XkbGetIndicatorState(disp, XkbUseCoreKbd, &state);
  displayState(state);
  
  /*
  win = XCreateSimpleWindow(disp, DefaultRootWindow(display), 0, 0, 200, 300, 5, white,
                            black);
  */

  while (1) {
    XNextEvent(disp, &ev.core);
    if (ev.type == xkb_event_base && ev.any.xkb_type == XkbIndicatorStateNotify) {
      displayState(ev.indicators.state);
    }
  }
  return 0;
}
Beispiel #11
0
void handle_key(XCape_t *self, KeyMap_t *key,
		Bool mouse_pressed, int key_event) {

	if (key_event == KeyRelease) {
		unsigned n;
		int caps_state = 0;
		int num_state = 0;
		char msg[18] = "";
		char *key_name = XKeysymToString(key->ks);
		XkbGetIndicatorState(self->ctrl_conn, XkbUseCoreKbd, &n);

		if (self->debug)
			fprintf(stdout, "%s key state %d\n", key_name, n);

		caps_state = (n & 0x01) == 1;
		num_state = (n & 0x02) == 2;

		if (strcmp(key_name, "Num_Lock") == 0) {
			if (num_state) {
				strcpy(msg, "Num Lock is on");
			} else {
				strcpy(msg, "Num Lock is off");
			}
		}

		if (strcmp(key_name, "Caps_Lock") == 0) {
			if (caps_state) {
				strcpy(msg, "Caps Lock is on");
			} else {
				strcpy(msg, "Caps Lock is off");
			}
		}

		notify_init("Lock key pressed");
		NotifyNotification * notification = notify_notification_new(
				"Lock key pressed", msg, "dialog-information");
		notify_notification_show(notification, NULL);
		g_object_unref(G_OBJECT(notification));
		notify_uninit();
	}

	XFlush(self->ctrl_conn);
}
Beispiel #12
0
int xMaskedState( unsigned mask )
{
    unsigned int state = 0;
    XkbGetIndicatorState(display, XkbUseCoreKbd, &state);
    return state & mask;
}
/* main program (and loop) */
int main(int argc, char **argv)
{
  char s[1024];
  char batstat[1024];
  int i;
  struct tm ts;
  time_t t;
  int screen;
  int xkb_ext = -1;
  int xkbev, xkberr;

  /* install exit() handler */
  if(atexit(killemall))
  {
    fprintf(stderr, "Cannot install exit handler.\n");
    exit(1);
  }

  if(argc > 1)
  {
    for(i = 1; i < argc; i++)
    {
      if(argv[i][0] != '-'
      || !argv[i][1]
      || argv[i][2])
      {
        fprintf(stderr, "Unrecognized option '%s'.\n", argv[i]);
        exit(1);
      }
      switch(argv[i][1])
      {
        case 'd':
          fprintf(stderr, "debug mode.\n");
          debug_mode = 1;
          break;

        case 'c':
          fprintf(stderr, "stdout mode -- no print to X.\n");
          stdout_mode = 1;
          break;

        default:
          fprintf(stderr, "Unrecognized option '%s'.\n", argv[i]);
          exit(1);
      }
    }
  
  }

  /* Get X11 root window and screen */
  if(!(dpy = XOpenDisplay(0)))
  {
    fprintf(stderr, "Cannot open display\n");
    exit(1);
  }
  screen = DefaultScreen(dpy);
  rootwin = RootWindow(dpy, screen);

  /* Initialize ACPI */
  battery_status_init();

  /* keyboard sexy leds initialization (this sentence has no sense) */
  if (!init_xkb_extension(&xkbev, &xkberr))
  {
    fprintf(stderr, "warning: no sexy kbd extension found.\n");
    xkb_ext = 0;
  } else {
    if(!XkbSelectEvents(dpy, XkbUseCoreKbd, XkbIndicatorStateNotifyMask, XkbIndicatorStateNotifyMask))
    {
      fprintf(stderr, "warning: no sexy kbd event filter.\n");
      xkb_ext = 0;
    }
  }

  /* main loop */
  while(1)
  {
    /* read ac/battery state */
    battery_status_get();

    /* print report */
    *batstat = '\0';
    if(energy.batn > 0)
    {
      if(energy.on_ac)
        strcat(batstat, "AC");
      if(energy.batn > 1)
      {
        char s = '(';
        for(i = 0; i < energy.batn; i++)
        {
          sprintf(batstat + strlen(batstat),
                  "%c%s%.0f%%",
                  s,
                  energy.batt[i].status == BATTSTAT_ST_NOTCHARGING ? "!" :
                  energy.batt[i].status == BATTSTAT_ST_CHARGING    ? "+" :
                  energy.batt[i].status == BATTSTAT_ST_DISCHARGING ? "-" :
                  energy.batt[i].status == BATTSTAT_ST_FULL        ? ""  : "?",
                  energy.batt[i].charge_level);
          s = ',';
        }
        strcat(batstat, ")");
      }

      switch(energy.status)
      {
        case BATTSTAT_ST_NOTCHARGING: strcat(batstat, " NOT charging "); break;
        case BATTSTAT_ST_DISCHARGING:                                    break;
        case BATTSTAT_ST_CHARGING:    strcat(batstat, " charging ");     break;
        case BATTSTAT_ST_FULL:        strcat(batstat, " full ");         break;
        default:
        case BATTSTAT_ST_UNKNOWN:     strcat(batstat, " unknown ");      break;
      }

      if(energy.rem_time > 0)
        sprintf(batstat + strlen(batstat), "%.0f%%, %d:%02d",
                energy.charge_level,
                (energy.rem_time / 60) / 60,
                (energy.rem_time / 60) % 60);
      else
        sprintf(batstat + strlen(batstat), "%.0f%%",
                energy.charge_level);
    }

    /* what time is it? [TIME TO DIE M**********R!!!] */
    time(&t);
    localtime_r(&t, &ts);

    /* format msg */
    sprintf(s, "%02d:%02d %02d/%02d/%d ",
            ts.tm_hour, ts.tm_min,
            ts.tm_mday, ts.tm_mon + 1, ts.tm_year + 1900);

    /* add ac/battery status report */
    if(strlen(batstat) > 0)
    {
      strcat(s, "[");
      strcat(s, batstat);
      strcat(s, "] ");
    }

    /* get key status */
    if(xkb_ext)
    {
      unsigned int state;
      char *t = s + strlen(s);

      XkbGetIndicatorState(dpy, XkbUseCoreKbd, &state);
      *t++ = state & (1 << 0) ? 'M' : '_';
      *t++ = state & (1 << 1) ? 'N' : '_';
      *t++ = state & (1 << 2) ? 'S' : '_';
      *t = '\0';
    }

    /* update dwm title */
    if(stdout_mode)
    {
      printf("%s\n", s);
    } else {
      XStoreName(dpy, rootwin, s);
      XFlush(dpy);
    }

    /* wait a little before repeat */
    sleep(1);
  }
}