Make Cmd/Ctrl/Shift+click/Enter open new windows
This commit is contained in:
@@ -1307,6 +1307,15 @@ fiv_browser_button_press_event(GtkWidget *widget, GdkEventButton *event)
|
|||||||
return GDK_EVENT_PROPAGATE;
|
return GDK_EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
modifier_state_opens_new_window(GtkWidget *widget, guint state)
|
||||||
|
{
|
||||||
|
GdkModifierType primary = gdk_keymap_get_modifier_mask(
|
||||||
|
gdk_keymap_get_for_display(gtk_widget_get_display(widget)),
|
||||||
|
GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR);
|
||||||
|
return state == primary || state == GDK_SHIFT_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
fiv_browser_button_release_event(GtkWidget *widget, GdkEventButton *event)
|
fiv_browser_button_release_event(GtkWidget *widget, GdkEventButton *event)
|
||||||
{
|
{
|
||||||
@@ -1323,15 +1332,13 @@ fiv_browser_button_release_event(GtkWidget *widget, GdkEventButton *event)
|
|||||||
if (!entry || entry != entry_at(self, event->x, event->y))
|
if (!entry || entry != entry_at(self, event->x, event->y))
|
||||||
return GDK_EVENT_PROPAGATE;
|
return GDK_EVENT_PROPAGATE;
|
||||||
|
|
||||||
GdkModifierType primary = gdk_keymap_get_modifier_mask(
|
|
||||||
gdk_keymap_get_for_display(gtk_widget_get_display(widget)),
|
|
||||||
GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR);
|
|
||||||
|
|
||||||
guint state = event->state & gtk_accelerator_get_default_mod_mask();
|
guint state = event->state & gtk_accelerator_get_default_mod_mask();
|
||||||
if ((event->button == GDK_BUTTON_PRIMARY && state == 0))
|
if ((event->button == GDK_BUTTON_PRIMARY && state == 0))
|
||||||
return open_entry(widget, entry, FALSE);
|
return open_entry(widget, entry, FALSE);
|
||||||
if ((event->button == GDK_BUTTON_PRIMARY && state == primary) ||
|
if ((event->button == GDK_BUTTON_MIDDLE && state == 0) ||
|
||||||
(event->button == GDK_BUTTON_MIDDLE && state == 0))
|
(event->button == GDK_BUTTON_PRIMARY &&
|
||||||
|
modifier_state_opens_new_window(widget, state)))
|
||||||
return open_entry(widget, entry, TRUE);
|
return open_entry(widget, entry, TRUE);
|
||||||
return GDK_EVENT_PROPAGATE;
|
return GDK_EVENT_PROPAGATE;
|
||||||
}
|
}
|
||||||
@@ -1582,7 +1589,8 @@ static gboolean
|
|||||||
fiv_browser_key_press_event(GtkWidget *widget, GdkEventKey *event)
|
fiv_browser_key_press_event(GtkWidget *widget, GdkEventKey *event)
|
||||||
{
|
{
|
||||||
FivBrowser *self = FIV_BROWSER(widget);
|
FivBrowser *self = FIV_BROWSER(widget);
|
||||||
switch ((event->state & gtk_accelerator_get_default_mod_mask())) {
|
guint state = event->state & gtk_accelerator_get_default_mod_mask();
|
||||||
|
switch (state) {
|
||||||
case 0:
|
case 0:
|
||||||
switch (event->keyval) {
|
switch (event->keyval) {
|
||||||
case GDK_KEY_Delete:
|
case GDK_KEY_Delete:
|
||||||
@@ -1639,6 +1647,15 @@ fiv_browser_key_press_event(GtkWidget *widget, GdkEventKey *event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (modifier_state_opens_new_window(widget, state)) {
|
||||||
|
switch (event->keyval) {
|
||||||
|
case GDK_KEY_Return:
|
||||||
|
if (self->selected)
|
||||||
|
return open_entry(widget, self->selected, TRUE);
|
||||||
|
return GDK_EVENT_STOP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return GTK_WIDGET_CLASS(fiv_browser_parent_class)
|
return GTK_WIDGET_CLASS(fiv_browser_parent_class)
|
||||||
->key_press_event(widget, event);
|
->key_press_event(widget, event);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user