Skip to content

Commit

Permalink
Media queries: excluded non-pointing devices from pointer/hover
Browse files Browse the repository at this point in the history
The pointer/hover media query spec is ambiguous about the inclusion of
non-pointing input device like keyboards:
http://dev.w3.org/csswg/mediaqueries-4/#mf-interaction

This CL removes the such devices from consideration in Chrome---this
seems more logical since pointer/hover queries make sense only for
pointing devices.

BUG=442795

Review URL: https://codereview.chromium.org/806693008

Cr-Commit-Position: refs/heads/master@{#309203}
  • Loading branch information
mustaqahmed authored and Commit bot committed Dec 19, 2014
1 parent fd05cf5 commit 7a42795
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 58 deletions.
20 changes: 10 additions & 10 deletions ui/android/java/src/org/chromium/ui/base/TouchDevice.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,14 @@ private static int availablePointerTypes(Context context) {
pointerTypesVal |= PointerType.FINE;
} else if (hasSource(sources, InputDevice.SOURCE_TOUCHSCREEN)) {
pointerTypesVal |= PointerType.COARSE;
} else {
// The remaining InputDevice sources:
// SOURCE_DPAD, SOURCE_GAMEPAD, SOURCE_JOYSTICK, SOURCE_KEYBOARD,
// SOURCE_TOUCH_NAVIGATION, SOURCE_UNKNOWN
pointerTypesVal |= PointerType.NONE;
}
// Remaining InputDevice sources: SOURCE_DPAD, SOURCE_GAMEPAD, SOURCE_JOYSTICK,
// SOURCE_KEYBOARD, SOURCE_TOUCH_NAVIGATION, SOURCE_UNKNOWN
}

if (pointerTypesVal == 0)
pointerTypesVal = PointerType.NONE;

return pointerTypesVal;
}

Expand All @@ -94,14 +94,14 @@ private static int availableHoverTypes(Context context) {
} else if (hasSource(sources, InputDevice.SOURCE_STYLUS)
|| hasSource(sources, InputDevice.SOURCE_TOUCHSCREEN)) {
hoverTypesVal |= HoverType.ON_DEMAND;
} else {
// The remaining InputDevice sources:
// SOURCE_DPAD, SOURCE_GAMEPAD, SOURCE_JOYSTICK,
// SOURCE_KEYBOARD, SOURCE_TOUCH_NAVIGATION, SOURCE_UNKNOWN
hoverTypesVal |= HoverType.NONE;
}
// Remaining InputDevice sources: SOURCE_DPAD, SOURCE_GAMEPAD, SOURCE_JOYSTICK,
// SOURCE_KEYBOARD, SOURCE_TOUCH_NAVIGATION, SOURCE_UNKNOWN
}

if (hoverTypesVal == 0)
hoverTypesVal = HoverType.NONE;

return hoverTypesVal;
}

Expand Down
12 changes: 6 additions & 6 deletions ui/base/touch/touch_device.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,22 @@ int MaxTouchPoints() {
}

int GetAvailablePointerTypes() {
// Assume a non-touch-device with a keyboard and a mouse
return POINTER_TYPE_FINE | POINTER_TYPE_NONE;
// Assume a non-touch-device with a mouse
return POINTER_TYPE_FINE;
}

PointerType GetPrimaryPointerType() {
// Assume a non-touch-device with a keyboard and a mouse
// Assume a non-touch-device with a mouse
return POINTER_TYPE_FINE;
}

int GetAvailableHoverTypes() {
// Assume a non-touch-device with a keyboard and a mouse
return HOVER_TYPE_HOVER | HOVER_TYPE_NONE;
// Assume a non-touch-device with a mouse
return HOVER_TYPE_HOVER;
}

HoverType GetPrimaryHoverType() {
// Assume a non-touch-device with a keyboard and a mouse
// Assume a non-touch-device with a mouse
return HOVER_TYPE_HOVER;
}

Expand Down
4 changes: 2 additions & 2 deletions ui/base/touch/touch_device.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
#include <jni.h>
#endif

// FIXME: This covers more than just touches. Rename to input_device?
// crbug.com/438794
// TODO(mustaq@chromium.org): This covers more than just touches. Rename to
// input_device? crbug.com/438794

namespace ui {

Expand Down
4 changes: 2 additions & 2 deletions ui/base/touch/touch_device_android.cc
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ PointerType GetPrimaryPointerType() {
return POINTER_TYPE_COARSE;
if (available_pointer_types & POINTER_TYPE_FINE)
return POINTER_TYPE_FINE;
DCHECK(available_pointer_types & POINTER_TYPE_NONE);
DCHECK_EQ(available_pointer_types, POINTER_TYPE_NONE);
return POINTER_TYPE_NONE;
}

Expand All @@ -52,7 +52,7 @@ HoverType GetPrimaryHoverType() {
return HOVER_TYPE_ON_DEMAND;
if (available_hover_types & HOVER_TYPE_HOVER)
return HOVER_TYPE_HOVER;
DCHECK(available_hover_types & HOVER_TYPE_NONE);
DCHECK_EQ(available_hover_types, HOVER_TYPE_NONE);
return HOVER_TYPE_NONE;
}

Expand Down
39 changes: 14 additions & 25 deletions ui/base/touch/touch_device_aurax11.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3,71 +3,60 @@
// found in the LICENSE file.

#include "ui/base/touch/touch_device.h"

#include "base/logging.h"
#include "ui/events/devices/device_data_manager.h"
#include "ui/events/devices/x11/touch_factory_x11.h"

namespace ui {

bool IsTouchDevicePresent() {
return ui::TouchFactory::GetInstance()->IsTouchDevicePresent();
return ui::DeviceDataManager::GetInstance()->touchscreen_devices().size() > 0;
}

int MaxTouchPoints() {
return ui::TouchFactory::GetInstance()->GetMaxTouchPoints();
}

// FIXME: Use mouse detection logic. crbug.com/440503
// TODO(mustaq@chromium.org): Use mouse detection logic. crbug.com/440503
int GetAvailablePointerTypes() {
int available_pointer_types = 0;

if (ui::DeviceDataManager::GetInstance()->keyboard_devices().size() > 0)
available_pointer_types |= POINTER_TYPE_NONE;

// Assume either a touch-device or a mouse is there
// Assume a mouse is there
int available_pointer_types = POINTER_TYPE_FINE;
if (IsTouchDevicePresent())
available_pointer_types |= POINTER_TYPE_COARSE;
else
available_pointer_types |= POINTER_TYPE_FINE;

DCHECK(available_pointer_types);
return available_pointer_types;
}

PointerType GetPrimaryPointerType() {
int available_pointer_types = GetAvailablePointerTypes();
if (available_pointer_types & POINTER_TYPE_COARSE)
return POINTER_TYPE_COARSE;
if (available_pointer_types & POINTER_TYPE_FINE)
return POINTER_TYPE_FINE;
DCHECK(available_pointer_types & POINTER_TYPE_NONE);
if (available_pointer_types & POINTER_TYPE_COARSE)
return POINTER_TYPE_COARSE;
DCHECK_EQ(available_pointer_types, POINTER_TYPE_NONE);
return POINTER_TYPE_NONE;
}

// FIXME: Use mouse detection logic. crbug.com/440503
// TODO(mustaq@chromium.org): Use mouse detection logic. crbug.com/440503
int GetAvailableHoverTypes() {
int available_hover_types = 0;

if (ui::DeviceDataManager::GetInstance()->keyboard_devices().size() > 0)
available_hover_types |= HOVER_TYPE_NONE;

// Assume either a touch-device or a mouse is there
// Assume a mouse is there
int available_hover_types = HOVER_TYPE_HOVER;
if (IsTouchDevicePresent())
available_hover_types |= HOVER_TYPE_ON_DEMAND;
else
available_hover_types |= HOVER_TYPE_HOVER;

DCHECK(available_hover_types);
return available_hover_types;
}

HoverType GetPrimaryHoverType() {
int available_hover_types = GetAvailableHoverTypes();
if (available_hover_types & HOVER_TYPE_ON_DEMAND)
return HOVER_TYPE_ON_DEMAND;
if (available_hover_types & HOVER_TYPE_HOVER)
return HOVER_TYPE_HOVER;
DCHECK(available_hover_types & HOVER_TYPE_NONE);
if (available_hover_types & HOVER_TYPE_ON_DEMAND)
return HOVER_TYPE_ON_DEMAND;
DCHECK_EQ(available_hover_types, HOVER_TYPE_NONE);
return HOVER_TYPE_NONE;
}

Expand Down
43 changes: 34 additions & 9 deletions ui/base/touch/touch_device_ozone.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,36 +4,61 @@

#include "ui/base/touch/touch_device.h"

#include "base/logging.h"
#include "ui/events/devices/device_data_manager.h"

namespace ui {

bool IsTouchDevicePresent() {
// TODO(sadrul@chromium.org): Support evdev hotplugging.
return true;
return ui::DeviceDataManager::GetInstance()->touchscreen_devices().size() > 0;
}

int MaxTouchPoints() {
// Hard-code this to 11 until we have a real implementation.
return 11;
}

// TODO(mustaq@chromium.org): Use mouse detection logic. crbug.com/440503
int GetAvailablePointerTypes() {
// Assume a touch-device with a keyboard
return POINTER_TYPE_COARSE | POINTER_TYPE_NONE;
// Assume a mouse is there
int available_pointer_types = POINTER_TYPE_FINE;
if (IsTouchDevicePresent())
available_pointer_types |= POINTER_TYPE_COARSE;

DCHECK(available_pointer_types);
return available_pointer_types;
}

PointerType GetPrimaryPointerType() {
// Assume a touch-device with a keyboard
return POINTER_TYPE_COARSE;
int available_pointer_types = GetAvailablePointerTypes();
if (available_pointer_types & POINTER_TYPE_FINE)
return POINTER_TYPE_FINE;
if (available_pointer_types & POINTER_TYPE_COARSE)
return POINTER_TYPE_COARSE;
DCHECK_EQ(available_pointer_types, POINTER_TYPE_NONE);
return POINTER_TYPE_NONE;
}

// TODO(mustaq@chromium.org): Use mouse detection logic. crbug.com/440503
int GetAvailableHoverTypes() {
// Assume a touch-device with a keyboard
return HOVER_TYPE_ON_DEMAND | HOVER_TYPE_NONE;
// Assume a mouse is there
int available_hover_types = HOVER_TYPE_HOVER;
if (IsTouchDevicePresent())
available_hover_types |= HOVER_TYPE_ON_DEMAND;

DCHECK(available_hover_types);
return available_hover_types;
}

HoverType GetPrimaryHoverType() {
// Assume a touch-device with a keyboard
return HOVER_TYPE_ON_DEMAND;
int available_hover_types = GetAvailableHoverTypes();
if (available_hover_types & HOVER_TYPE_HOVER)
return HOVER_TYPE_HOVER;
if (available_hover_types & HOVER_TYPE_ON_DEMAND)
return HOVER_TYPE_ON_DEMAND;
DCHECK_EQ(available_hover_types, HOVER_TYPE_NONE);
return HOVER_TYPE_NONE;
}

} // namespace ui
6 changes: 2 additions & 4 deletions ui/base/touch/touch_device_win.cc
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ int GetAvailablePointerTypes() {
GetSystemMetrics(SM_CMOUSEBUTTONS) > 0)
available_pointer_types |= POINTER_TYPE_FINE;

// When no types are found, assume there's a POINTER_TYPE_NONE
if (available_pointer_types == 0)
available_pointer_types = POINTER_TYPE_NONE;

Expand All @@ -43,7 +42,7 @@ PointerType GetPrimaryPointerType() {
return POINTER_TYPE_FINE;
if (available_pointer_types & POINTER_TYPE_COARSE)
return POINTER_TYPE_COARSE;
DCHECK(available_pointer_types & POINTER_TYPE_NONE);
DCHECK_EQ(available_pointer_types, POINTER_TYPE_NONE);
return POINTER_TYPE_NONE;
}

Expand All @@ -54,7 +53,6 @@ int GetAvailableHoverTypes() {
if (GetSystemMetrics(SM_MOUSEPRESENT) != 0)
available_hover_types |= HOVER_TYPE_HOVER;

// When no types are found, assume there's a HOVER_TYPE_NONE
if (available_hover_types == 0)
available_hover_types = HOVER_TYPE_NONE;

Expand All @@ -67,7 +65,7 @@ HoverType GetPrimaryHoverType() {
return HOVER_TYPE_HOVER;
if (available_hover_types & HOVER_TYPE_ON_DEMAND)
return HOVER_TYPE_ON_DEMAND;
DCHECK(available_hover_types & HOVER_TYPE_NONE);
DCHECK_EQ(available_hover_types, HOVER_TYPE_NONE);
return HOVER_TYPE_NONE;
}

Expand Down

0 comments on commit 7a42795

Please sign in to comment.