bool CL_Clipboard_X11::is_clipboard_text_available() const { if (get_clipboard_text().size() > 0) { return true; } return false; }
bool Clipboard_X11::is_clipboard_text_available() const { return get_clipboard_text().size() > 0; }
void Entry::executeCmd(EntryCmd cmd, int unicodeChar, bool shift_pressed) { std::string text = this->text(); int selbeg, selend; getEntryThemeInfo(NULL, NULL, NULL, &selbeg, &selend); switch (cmd) { case EntryCmd::NoOp: break; case EntryCmd::InsertChar: // delete the entire selection if (selbeg >= 0) { text.erase(m_boxes[selbeg].from, m_boxes[selend].to - m_boxes[selbeg].from); m_caret = selbeg; // We set the caret to the beginning of the erased selection, // needed to show the first inserted character in case // m_scroll > m_caret. E.g. we select all text and insert a // new character to replace the whole text, the new inserted // character makes m_caret=1, so m_scroll will be 1 too, but // we need to make m_scroll=0 to show the new inserted char.) // In this way, we first ensure a m_scroll value enough to // show the new inserted character. recalcCharBoxes(text); setCaretPos(m_caret); } // Convert the unicode character -> wstring -> utf-8 string -> insert the utf-8 string if (lastCaretPos() < m_maxsize) { ASSERT(m_caret <= lastCaretPos()); std::wstring unicodeStr; unicodeStr.push_back(unicodeChar); text.insert(m_boxes[m_caret].from, base::to_utf8(unicodeStr)); recalcCharBoxes(text); ++m_caret; } m_select = -1; break; case EntryCmd::BackwardChar: case EntryCmd::BackwardWord: // selection if (shift_pressed) { if (m_select < 0) m_select = m_caret; } else m_select = -1; // backward word if (cmd == EntryCmd::BackwardWord) { backwardWord(); } // backward char else if (m_caret > 0) { m_caret--; } break; case EntryCmd::ForwardChar: case EntryCmd::ForwardWord: // selection if (shift_pressed) { if (m_select < 0) m_select = m_caret; } else m_select = -1; // forward word if (cmd == EntryCmd::ForwardWord) { forwardWord(); } // forward char else if (m_caret < (int)text.size()) { m_caret++; } break; case EntryCmd::BeginningOfLine: // selection if (shift_pressed) { if (m_select < 0) m_select = m_caret; } else m_select = -1; m_caret = 0; break; case EntryCmd::EndOfLine: // selection if (shift_pressed) { if (m_select < 0) m_select = m_caret; } else m_select = -1; m_caret = lastCaretPos(); break; case EntryCmd::DeleteForward: case EntryCmd::Cut: // delete the entire selection if (selbeg >= 0) { // *cut* text! if (cmd == EntryCmd::Cut) set_clipboard_text(selectedText()); // remove text text.erase(m_boxes[selbeg].from, m_boxes[selend].to - m_boxes[selbeg].from); m_caret = selbeg; } // delete the next character else { if (m_caret < (int)text.size()) text.erase(m_boxes[m_caret].from, m_boxes[m_caret].to - m_boxes[m_caret].from); } m_select = -1; break; case EntryCmd::Paste: { std::string clipboard; if (get_clipboard_text(clipboard)) { // delete the entire selection if (selbeg >= 0) { text.erase(m_boxes[selbeg].from, m_boxes[selend].to - m_boxes[selbeg].from); m_caret = selbeg; m_select = -1; } // Paste text recalcCharBoxes(text); int oldBoxes = m_boxes.size(); text.insert(m_boxes[m_caret].from, clipboard); // Remove extra chars that do not fit in m_maxsize recalcCharBoxes(text); if (lastCaretPos() > m_maxsize) { text.erase(m_boxes[m_maxsize].from, text.size() - m_boxes[m_maxsize].from); recalcCharBoxes(text); } int newBoxes = m_boxes.size(); setCaretPos(m_caret+(newBoxes - oldBoxes)); } break; } case EntryCmd::Copy: if (selbeg >= 0) set_clipboard_text(selectedText()); break; case EntryCmd::DeleteBackward: // delete the entire selection if (selbeg >= 0) { text.erase(m_boxes[selbeg].from, m_boxes[selend].to - m_boxes[selbeg].from); m_caret = selbeg; } // delete the previous character else { if (m_caret > 0) { --m_caret; text.erase(m_boxes[m_caret].from, m_boxes[m_caret].to - m_boxes[m_caret].from); } } m_select = -1; break; case EntryCmd::DeleteBackwardWord: m_select = m_caret; backwardWord(); if (m_caret < m_select) { text.erase(m_boxes[m_caret].from, m_boxes[m_select].to - m_boxes[m_caret].from); } m_select = -1; break; case EntryCmd::DeleteForwardToEndOfLine: text.erase(m_boxes[m_caret].from); break; case EntryCmd::SelectAll: selectAllText(); break; } if (text != this->text()) { setText(text); onChange(); } setCaretPos(m_caret); invalidate(); }