static int windows_wminput_init(void) { RAWINPUTDEVICELIST *devlist = NULL; UINT ct = 0; UINT i; available_mice = 0; if (!find_api_symbols()) /* only supported on WinXP and later. */ return -1; pGetRawInputDeviceList(NULL, &ct, sizeof (RAWINPUTDEVICELIST)); if (ct == 0) /* no devices. */ return 0; devlist = (PRAWINPUTDEVICELIST) alloca(sizeof (RAWINPUTDEVICELIST) * ct); pGetRawInputDeviceList(devlist, &ct, sizeof (RAWINPUTDEVICELIST)); for (i = 0; i < ct; i++) init_mouse(&devlist[i]); if (!init_event_queue()) { cleanup_window(); available_mice = 0; } /* if */ return available_mice; } /* windows_wminput_init */
static void revoke_permissions (GtkButton *revoke_button2, gpointer data) { cleanup_window(); pthread_mutex_lock(&communication_mutex); invalidate_session_requested = TRUE; scrobbling_enabled = FALSE; pthread_cond_signal(&communication_signal); pthread_mutex_unlock(&communication_mutex); gtk_widget_set_sensitive(button, TRUE); }
static void windows_wminput_quit(void) { /* unregister WM_INPUT devices... */ RAWINPUTDEVICE rid; ZeroMemory(&rid, sizeof (rid)); rid.usUsagePage = 1; /* GenericDesktop page */ rid.usUsage = 2; /* GeneralDestop Mouse usage. */ rid.dwFlags |= RIDEV_REMOVE; pRegisterRawInputDevices(&rid, 1, sizeof (rid)); cleanup_window(); available_mice = 0; pDeleteCriticalSection(&mutex); } /* windows_wminput_quit */
static void permission_checker (GtkButton *button12, gpointer data) { cleanup_window(); gtk_image_set_from_stock(GTK_IMAGE(permission_status_icon), GTK_STOCK_EXECUTE, GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_label_set_label(GTK_LABEL(permission_status_label), _("Checking...")); //This will make the communication thread check the permission //and set the current status on the perm_result enum permission_check_requested = TRUE; //This is only to accelerate the check. //If scrobbles are being made, they are stopped for the request to be done sooner. scrobbling_enabled = FALSE; //Wake up the communication thread in case it's waiting for track plays pthread_mutex_lock(&communication_mutex); pthread_cond_signal(&communication_signal); pthread_mutex_unlock(&communication_mutex); //The button is clicked. Wait for the permission check to be done. gdk_threads_add_timeout_seconds(1, permission_checker_thread, data); }