diff --git a/qt5/src/poppler-annotation.cc b/qt5/src/poppler-annotation.cc
index 2394ffc..5550efc 100644
--- a/qt5/src/poppler-annotation.cc
+++ b/qt5/src/poppler-annotation.cc
@@ -778,20 +778,7 @@
     if ( pdfAnnot->getType() != Annot::typeScreen && pdfAnnot->getType() != Annot::typeWidget )
         return nullptr;
 
-    Annot::AdditionalActionsType actionType = Annot::actionCursorEntering;
-    switch ( type )
-    {
-        case Annotation::CursorEnteringAction: actionType = Annot::actionCursorEntering; break;
-        case Annotation::CursorLeavingAction: actionType = Annot::actionCursorLeaving; break;
-        case Annotation::MousePressedAction: actionType = Annot::actionMousePressed; break;
-        case Annotation::MouseReleasedAction: actionType = Annot::actionMouseReleased; break;
-        case Annotation::FocusInAction: actionType = Annot::actionFocusIn; break;
-        case Annotation::FocusOutAction: actionType = Annot::actionFocusOut; break;
-        case Annotation::PageOpeningAction: actionType = Annot::actionPageOpening; break;
-        case Annotation::PageClosingAction: actionType = Annot::actionPageClosing; break;
-        case Annotation::PageVisibleAction: actionType = Annot::actionPageVisible; break;
-        case Annotation::PageInvisibleAction: actionType = Annot::actionPageInvisible; break;
-    }
+    const Annot::AdditionalActionsType actionType = toPopplerAdditionalActionType(type);
 
     ::LinkAction *linkAction = nullptr;
     if ( pdfAnnot->getType() == Annot::typeScreen )
diff --git a/qt5/src/poppler-form.cc b/qt5/src/poppler-form.cc
index 03d0489..9d1b329 100644
--- a/qt5/src/poppler-form.cc
+++ b/qt5/src/poppler-form.cc
@@ -1,6 +1,6 @@
 /* poppler-form.h: qt interface to poppler
  * Copyright (C) 2007-2008, 2011, Pino Toscano <pino@kde.org>
- * Copyright (C) 2008, 2011, 2012, 2015-2017 Albert Astals Cid <aacid@kde.org>
+ * Copyright (C) 2008, 2011, 2012, 2015-2018 Albert Astals Cid <aacid@kde.org>
  * Copyright (C) 2011 Carlos Garcia Campos <carlosgc@gnome.org>
  * Copyright (C) 2012, Adam Reichold <adamreichold@myopera.com>
  * Copyright (C) 2016, Hanno Meyer-Thurow <h.mth@web.de>
@@ -212,20 +212,7 @@
     return nullptr;
   }
 
-  Annot::AdditionalActionsType actionType = Annot::actionMouseReleased;
-  switch (type)
-  {
-      case Annotation::CursorEnteringAction: actionType = Annot::actionCursorEntering; break;
-      case Annotation::CursorLeavingAction:  actionType = Annot::actionCursorLeaving; break;
-      case Annotation::MousePressedAction:   actionType = Annot::actionMousePressed; break;
-      case Annotation::MouseReleasedAction:  actionType = Annot::actionMouseReleased; break;
-      case Annotation::FocusInAction:        actionType = Annot::actionFocusIn; break;
-      case Annotation::FocusOutAction:       actionType = Annot::actionFocusOut; break;
-      case Annotation::PageOpeningAction:    actionType = Annot::actionPageOpening; break;
-      case Annotation::PageClosingAction:    actionType = Annot::actionPageClosing; break;
-      case Annotation::PageVisibleAction:    actionType = Annot::actionPageVisible; break;
-      case Annotation::PageInvisibleAction:  actionType = Annot::actionPageInvisible; break;
-  }
+  const Annot::AdditionalActionsType actionType = toPopplerAdditionalActionType(type);
 
   Link* action = nullptr;
   if (::LinkAction *act = w->getAdditionalAction(actionType))
diff --git a/qt5/src/poppler-private.cc b/qt5/src/poppler-private.cc
index 78751f8..ca5251d 100644
--- a/qt5/src/poppler-private.cc
+++ b/qt5/src/poppler-private.cc
@@ -163,6 +163,24 @@
         return QStringToUnicodeGooString(dt.toUTC().toString("yyyyMMddhhmmss+00'00'"));
     }
 
+    Annot::AdditionalActionsType toPopplerAdditionalActionType(Annotation::AdditionalActionType type) {
+        switch ( type )
+        {
+            case Annotation::CursorEnteringAction:  return Annot::actionCursorEntering;
+            case Annotation::CursorLeavingAction:   return Annot::actionCursorLeaving;
+            case Annotation::MousePressedAction:    return Annot::actionMousePressed;
+            case Annotation::MouseReleasedAction:   return Annot::actionMouseReleased;
+            case Annotation::FocusInAction:         return Annot::actionFocusIn;
+            case Annotation::FocusOutAction:        return Annot::actionFocusOut;
+            case Annotation::PageOpeningAction:     return Annot::actionPageOpening;
+            case Annotation::PageClosingAction:     return Annot::actionPageClosing;
+            case Annotation::PageVisibleAction:     return Annot::actionPageVisible;
+            case Annotation::PageInvisibleAction:   return Annot::actionPageInvisible;
+        }
+
+        return Annot::actionCursorEntering;
+    }
+
     static void linkActionToTocItem( const ::LinkAction * a, DocumentData * doc, QDomElement * e )
     {
         if ( !a || !e )
diff --git a/qt5/src/poppler-private.h b/qt5/src/poppler-private.h
index 5271517..9b261d3 100644
--- a/qt5/src/poppler-private.h
+++ b/qt5/src/poppler-private.h
@@ -70,6 +70,8 @@
 
     void qt5ErrorFunction(int pos, char *msg, va_list args);
 
+    Annot::AdditionalActionsType toPopplerAdditionalActionType(Annotation::AdditionalActionType type);
+
     class LinkDestinationData
     {
         public:
