File: create_note_action.cc

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (104 lines) | stat: -rw-r--r-- 2,974 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ash/system/palette/tools/create_note_action.h"

#include "ash/public/cpp/note_taking_client.h"
#include "ash/resources/vector_icons/vector_icons.h"
#include "ash/shell.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/palette/palette_ids.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/events/event.h"
#include "ui/views/view.h"
#include "ui/views/widget/widget.h"

namespace ash {
namespace {
NoteTakingClient* GetAvailableClient() {
  auto* client = NoteTakingClient::GetInstance();
  if (!client || !client->CanCreateNote())
    return nullptr;
  return client;
}
}  // namespace

CreateNoteAction::CreateNoteAction(Delegate* delegate)
    : CommonPaletteTool(delegate) {
  Shell::Get()->AddPreTargetHandler(this);
}

CreateNoteAction::~CreateNoteAction() {
  Shell::Get()->RemovePreTargetHandler(this);
}

PaletteGroup CreateNoteAction::GetGroup() const {
  return PaletteGroup::ACTION;
}

PaletteToolId CreateNoteAction::GetToolId() const {
  return PaletteToolId::CREATE_NOTE;
}

void CreateNoteAction::OnEnable() {
  CommonPaletteTool::OnEnable();

  auto* client = GetAvailableClient();
  if (client)
    client->CreateNote();

  delegate()->DisableTool(GetToolId());
  delegate()->HidePalette();
}

views::View* CreateNoteAction::CreateView() {
  if (!GetAvailableClient())
    return nullptr;

  if (!ShouldShowOnDisplay())
    return nullptr;

  return CreateDefaultView(
      l10n_util::GetStringUTF16(IDS_ASH_STYLUS_TOOLS_CREATE_NOTE_ACTION));
}

const gfx::VectorIcon& CreateNoteAction::GetPaletteIcon() const {
  return kPaletteActionCreateNoteIcon;
}

void CreateNoteAction::OnKeyEvent(ui::KeyEvent* event) {
  // Listen for events generated by a bluetooth button on the tail of a stylus.
  // This is different from a regular stylus button on a barrel. Regular barrel
  // buttons require proximity to the screen and add a flag to the touch event,
  // rather than generating a key event.
  //
  // The only events with the EF_IS_STYLUS_BUTTON flags will be generated by
  // special bluetooth buttons.
  if (!(event->flags() & ui::EF_IS_STYLUS_BUTTON))
    return;
  if (event->type() == ui::EventType::kKeyPressed) {
    OnEnable();
  }

  // This event shouldn't be handled as a regular key event, so consume it.
  event->StopPropagation();
}

// Don't show the create note action on external displays. This
// avoids some corner cases that haven't been addressed yet.
bool CreateNoteAction::ShouldShowOnDisplay() {
  if (external_display_for_test_)
    return false;

  // Allow the unit tests to function normally without a window
  aura::Window* root = delegate()->GetWindow();
  if (root == nullptr)
    return true;

  const display::Display& display =
      display::Screen::GetScreen()->GetDisplayNearestWindow(root);
  return display.IsInternal();
}

}  // namespace ash