I have problems implementing a quaternion camera. It looks weird, it looks like the camera is not rotating but the object at the x,y-plane is rotating.

class Camera
{
public:
Camera();
virtual ~Camera();
void rotate_mouse(int16_t x, int16_t y);
void rotate(double angle, glm::dvec3 axis);
void update();
protected:
private:
glm::dvec3 pos;
glm::dvec3 tar;
glm::dvec3 up;
};
Camera::Camera()
: pos(0,0,-5), tar(0,0,1), up(1,0,0)
{
update();
}
void Camera::rotate_mouse(int16_t x, int16_t y)
{
glm::dvec3 axis = glm::cross(tar-pos, up);
glm::normalize(axis);
rotate((double)y/1000.0f, axis);
rotate((double)x/1000.0f, glm::dvec3(0.0f, 1.0f, 0.0f));
}
void Camera::rotate(double angle, glm::dvec3 axis)
{
glm::dquat temp(cos(angle/2),
axis.x * sin(angle/2),
axis.y * sin(angle/2),
axis.z * sin(angle/2));
glm::dquat quat_view(0, tar);
glm::dquat result = (temp * quat_view) * glm::conjugate(temp);
tar.x = result.x;
tar.y = result.y;
tar.z = result.z;
}
void Camera::update()
{
gluLookAt(pos[0], pos[1], pos[2],
tar[0], tar[1], tar[2],
up[0], up[1], up[2]);
}

case SDL_MOUSEMOTION:
if (dragging)
{
//graphics->get_camera()->rotate(event.motion.xrel/1000000.0f, glm::vec3(0.f,1.f,0.f));
graphics->get_camera()->rotate_mouse(event.motion.xrel, event.motion.yrel);
graphics->get_camera()->update();
}
break;