using namespace Glib;
using namespace PBD;
+int
+pixel_width (const ustring& str, Pango::FontDescription& font)
+{
+ Label foo;
+ Glib::RefPtr<Pango::Layout> layout = foo.create_pango_layout ("");
+
+ layout->set_font_description (font);
+ layout->set_text (str);
+
+ int width, height;
+ Gtkmm2ext::get_ink_pixel_size (layout, width, height);
+ return width;
+}
+
ustring
fit_to_pixels (const ustring& str, int pixel_width, Pango::FontDescription& font, int& actual_width, bool with_ellipses)
{
#endif
if (focus) {
- if (GTK_IS_ENTRY(focus)) {
+ if (GTK_IS_ENTRY(focus) || Keyboard::some_magic_widget_has_focus()) {
special_handling_of_unmodified_accelerators = true;
}
}
#ifdef DEBUG_ACCELERATOR_HANDLING
if (debug) {
- cerr << "Key event: code = " << ev->keyval << " state = " << hex << ev->state << dec << " focus is an entry ? "
+ cerr << "Win = " << win << " Key event: code = " << ev->keyval << " state = " << hex << ev->state << dec << " special handling ? "
<< special_handling_of_unmodified_accelerators
<< endl;
}
/* no modifiers, propagate first */
+#ifdef DEBUG_ACCELERATOR_HANDLING
+ if (debug) {
+ cerr << "\tpropagate, then activate\n";
+ }
+#endif
+ if (!gtk_window_propagate_key_event (win, ev)) {
#ifdef DEBUG_ACCELERATOR_HANDLING
if (debug) {
- cerr << "\tactivate, then propagate\n";
+ cerr << "\tpropagation didn't handle, so activate\n";
}
#endif
- if (!gtk_window_propagate_key_event (win, ev)) {
return gtk_window_activate_key (win, ev);
- }
-
+ } else {
+#ifdef DEBUG_ACCELERATOR_HANDLING
+ if (debug) {
+ cerr << "\thandled by propagate\n";
+ }
+#endif
+ return true;
+ }
#ifdef DEBUG_ACCELERATOR_HANDLING
if (debug) {
}
-ustring
-short_path (ustring path, uint32_t target_characters)
-{
- ustring::size_type last_sep;
- ustring::size_type len = path.length();
- const char separator = '/';
-
- if (len <= target_characters) {
- return path;
- }
-
- if ((last_sep = path.find_last_of (separator)) == ustring::npos) {
-
- /* just a filename, but its too long anyway */
-
- if (target_characters > 3) {
- return path.substr (0, target_characters - 3) + ustring ("...");
- } else {
- /* stupid caller, just hand back the whole thing */
- return path;
- }
- }
-
- if (len - last_sep >= target_characters) {
-
- /* even the filename itself is too long */
-
- if (target_characters > 3) {
- return path.substr (last_sep+1, target_characters - 3) + ustring ("...");
- } else {
- /* stupid caller, just hand back the whole thing */
- return path;
- }
- }
-
- uint32_t so_far = (len - last_sep);
- uint32_t space_for = target_characters - so_far;
-
- if (space_for >= 3) {
- ustring res = "...";
- res += path.substr (last_sep - space_for);
- return res;
- } else {
- /* remove part of the end */
- ustring res = "...";
- res += path.substr (last_sep - space_for, len - last_sep + space_for - 3);
- res += "...";
- return res;
-
- }
-}